583 lines
22 KiB
C
583 lines
22 KiB
C
#pragma once
|
|
#ifndef SERVERCOMMON_PACKET_STRUCT_AW_H
|
|
#define SERVERCOMMON_PACKET_STRUCT_AW_H
|
|
|
|
//==================================================================================================
|
|
|
|
#include <Protocol_AW.h>
|
|
#include "./PacketStruct_AG.h"
|
|
|
|
//==================================================================================================
|
|
#pragma pack(push,1)
|
|
//==================================================================================================
|
|
|
|
#define PACKET_AW_OPEN(c, p) struct MSG_##p : public MSG_BASE_FORWARD { MSG_##p(){ m_byCategory = c; m_byProtocol = p; }
|
|
#define PACKET_AW_CLOSE };
|
|
|
|
#define PACKET_AW_INHERIT_OPEN(c, p, b) struct MSG_##p : public b { MSG_##p(){ m_byCategory = c; m_byProtocol = p; }
|
|
#define PACKET_AW_INHERIT_CLOSE };
|
|
|
|
//==================================================================================================
|
|
// NOTE: f110727.1L, added broadcaster, use 'MSG_ONEtoN_BROADCASTER_INTERNAL'
|
|
PACKET_AW_INHERIT_OPEN(AW_CONNECTION, AW_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN,
|
|
MSG_AG_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN)
|
|
PACKET_AW_INHERIT_CLOSE;
|
|
|
|
typedef VARMSG_EX<VARMSG_T04, MSG_AW_CONNECTION_PACKET_BROADCASTER_ONEtoN_SYN> \
|
|
MSG_ONEtoN_BROADCASTER_WORLD_INTERNAL;
|
|
//==================================================================================================
|
|
|
|
// AW_CONNECTION 카테고리
|
|
PACKET_AW_OPEN(AW_CONNECTION, AW_AGENTSERVER_INFO_SYN)
|
|
DWORD dwChannelID;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CONNECTION, AW_PREPARE_NEW_USER_SYN)
|
|
DWORD dwAuthUserID; //AuthServer에서 발급한 식별자
|
|
DWORD dwUserGuid; //DB에서 읽어온 GUID
|
|
// set to default (+1) that was added by __CH1305_090303_ACCOUNT_ID_LENGTH_EXTENTION__
|
|
TCHAR ptszAccountID[ID_MAX_LEN + 1]; // 계정 아이디
|
|
char szClientIP[MAX_IP_STRING_LEN + 1]; //클라이언트 아이피
|
|
BYTE byGMGrade; //GM권한
|
|
DWORD dwPCRoomID; // PC방인지 아닌지(0이면 일반 유저)
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CONNECTION, AW_PREPARE_NEW_USER_ACK)
|
|
bool enabled; // CHANGES: f110916.1L, added by _NA002676_WORLD_SERVER_RENEWAL
|
|
PACKET_AW_CLOSE;
|
|
|
|
// NOTE: f110916.1L, does not use anymore after _NA002676_WORLD_SERVER_RENEWAL
|
|
PACKET_AW_OPEN(AW_CONNECTION, AW_PREPARE_NEW_USER_NAK)
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_SET_CHARNAME_SYN)
|
|
DWORD dwCharGuid; //캐릭터 guid
|
|
char szCharName[MAX_CHARNAME_LENGTH+1];
|
|
GUILDGUID m_GuildGuid; // 소속 길드 Guid(없으면 0)
|
|
LEVELTYPE m_CharLevel;
|
|
|
|
BYTE m_CharClass;
|
|
#ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
BYTE gender;
|
|
#endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
|
|
|
|
void Clear()
|
|
{
|
|
const size_t clear_size = static_cast<size_t>((uint8_t*)(this + 1) - (uint8_t*)(&m_dwKey));
|
|
ZeroMemory(&m_dwKey, clear_size);
|
|
};
|
|
PACKET_AW_CLOSE;
|
|
|
|
// unused
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_UNSET_CHARNAME_SYN)
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_ENTER_ZONE_SYN)
|
|
DWORD dwZoneKey;
|
|
BYTE byZoneType;
|
|
BYTE chaoszone_type;
|
|
CODETYPE MapCode;
|
|
PACKET_AW_CLOSE;
|
|
|
|
//_NA_008679_20160202_REWORK_BATTLEGROUND
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_BATTLEGROUND_FALSENAME_CMD)
|
|
TCHAR false_name[MAX_CHARNAME_LENGTH+1];
|
|
|
|
VOID Clear()
|
|
{
|
|
ZeroMemory(false_name, sizeof(false_name));
|
|
}
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LEAVE_ZONE_SYN)
|
|
DWORD dwZoneKey;
|
|
BYTE byZoneType;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LOGOUT)
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 유저 정보 복구 요청
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_RESTORE_SYN)
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 유저 정보 목록
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_RESTORE_CMD)
|
|
DWORD dwAuthUserID;
|
|
DWORD dwUserGUID;
|
|
#ifdef __CH1305_090303_ACCOUNT_ID_LENGTH_EXTENTION__
|
|
TCHAR ptszAccountID[ID_MAX_LEN + 1]; // 계정 아이디
|
|
#else
|
|
TCHAR ptszAccountID[ID_MAX_LEN]; // 계정 아이디
|
|
#endif
|
|
char pszClientIP[IP_MAX_LEN]; //< ip는 char형
|
|
CHARGUID CharGuid;
|
|
TCHAR tszCharName[MAX_CHARNAME_LENGTH+1];
|
|
DWORD dwZoneKey;
|
|
BYTE byZoneType;
|
|
MAPCODE map_code; // NOTE: f110929.1L, _NA002676_WORLD_SERVER_RENEWAL
|
|
WORD wPartyKey; // 파티 가입되어 있는 경우 파티 키 전송
|
|
DWORD dwPCRoomID; // 예약값...인데 실제로는 PC방 여부(0이면 일반 유저)
|
|
BYTE byGMGrade; // GM Grade
|
|
GUILDGUID m_GuildGuid; // 소속 길드 Guid(없으면 0)
|
|
LEVELTYPE m_CharLevel;
|
|
BYTE m_CharClass;
|
|
|
|
void Clear()
|
|
{
|
|
const size_t kClearSize = (char*)(this + 1) - (char*)(&dwAuthUserID);
|
|
ZeroMemory(&dwAuthUserID, kClearSize);
|
|
};
|
|
uint16_t GetSize() const {
|
|
return sizeof(*this);
|
|
};
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 유저 레벨업(길드/친구 정보 갱신 위해 필요)
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LEVELUP_CMD)
|
|
CHARGUID m_CharGuid; // 레벨업한 놈
|
|
LEVELTYPE m_Level; // 현재 레벨
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_INTERCEPTION_SYN)
|
|
eINTERCEPTION_TYPE m_byInterceptionCode;
|
|
BOOL m_bFlag;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_INTERCEPTION_ACK)
|
|
eINTERCEPTION_TYPE m_byInterceptionCode;
|
|
BOOL m_bFlag;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_INTERCEPTION_NAK)
|
|
PACKET_AW_CLOSE;
|
|
|
|
// __KR_001355_20090608_GROUPINGSYSTEM_GW
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_STATUS_GROUP_ADDEXP_CMD)
|
|
CHARGUID m_CharGuid; // 캐릭터 Guid
|
|
EXPTYPE m_Amount; // 경험치량
|
|
TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1];//Low memeber name
|
|
PACKET_AW_CLOSE;
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_STATUS_GROUP_ADDMONEY_CMD)
|
|
CHARGUID m_CharGuid; // 캐릭터 Guid
|
|
MONEY m_Amount; // 보너스 하임
|
|
TCHAR m_szCharName[MAX_CHARNAME_LENGTH+1];//Hight memeber name
|
|
PACKET_AW_CLOSE;
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_STATUS_GROUP_EXP_ACQUISITION_CMD)
|
|
CHARGUID m_CharGuid; // 캐릭터 ID
|
|
BYTE m_byAcquisitionType; // 획득 사유 (eHEIM_ACQUISITION_TYPE)
|
|
EXPTYPE m_Amount; // 경험치량
|
|
PACKET_AW_CLOSE;
|
|
|
|
//__NA_0_20090627_HEIM_ACQUISITION_S2S_NOTIFICATION
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_HEIM_ACQUISITION_NTF)
|
|
CHARGUID m_CharGuid; // 캐릭터 ID
|
|
BYTE m_byAcquisitionType; // 획득 사유 (eHEIM_ACQUISITION_TYPE)
|
|
MONEY m_Amount; // 하임 금액
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_HEIM_CONSUMPTION_NTF)
|
|
CHARGUID m_CharGuid; // 캐릭터 ID
|
|
BYTE m_byConsumptionType; // 소비 사유 (eHEIM_CONSUMPTION_TYPE)
|
|
MONEY m_Amount; // 하임 금액
|
|
//_NA_0_20091119_HEIM_LOTTO_ACCUM_CTRL_BY_SHOP
|
|
int m_LottoAccumRatio; // 하임 행운 적립율
|
|
PACKET_AW_CLOSE;
|
|
|
|
// __KR_001355_20090608_GROUPINGSYSTEM_GW
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_STATUS_GROUP_SET_MEMBERINFO_CMD)
|
|
CHARGUID m_CharGuid;
|
|
eGROUP_STAT m_HighGroupinfo;
|
|
eGROUP_STAT m_LowGroupInfo;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_STATUS_GROUP_START_CMD)
|
|
CHARGUID m_CharGuid;
|
|
PACKET_AW_CLOSE;
|
|
|
|
// declared by __NA_001359_20090619_HEIM_LOTTO_SYSTEM = { AW_USER_LOTTO_~ }
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LOTTO_REWARD_SYN)
|
|
CHARGUID m_CharGuid;
|
|
MONEY m_Prize;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LOTTO_REWARD_ACK)
|
|
enum eRESULT_CODE {
|
|
RESULT_OK = 0,
|
|
ERROR_CHAR_NOT_ONLINE
|
|
};
|
|
INT32 m_iResult;
|
|
CHARGUID m_CharGuid;
|
|
MONEY m_Prize;
|
|
PACKET_AW_CLOSE;
|
|
|
|
#ifdef _NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE
|
|
// 하임 로또 복권용지 직접 구입 요청
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LOTTO_TICKET_PURCHASE_SYN)
|
|
CHARGUID iCharGuid; // 캐릭터 ID
|
|
WORD wDrawNum; // 회차
|
|
BYTE bAuto; // 자동 여부
|
|
BYTE bPickedNum[LOTTO_NUM_PICKS]; // 응모 번호
|
|
INT64 i64TicketPrice; // 복권용지 가격
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 하임 로또 복권용지 직접 구입 응답
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_LOTTO_TICKET_PURCHASE_ACK)
|
|
enum eRC_LOTTO_TICKET_PURCHASE
|
|
{
|
|
RESULT_OK = 0,
|
|
ERROR_NOT_ENOUGH_MONEY = 1,
|
|
ERROR_CHAR_NOT_ONLINE = 2
|
|
};
|
|
INT32 iResult; // 결과 코드
|
|
CHARGUID iCharGuid; // 캐릭터 ID
|
|
WORD wDrawNum; // 회차
|
|
BYTE bAuto; // 자동 여부
|
|
BYTE bPickedNum[LOTTO_NUM_PICKS]; // 응모 번호
|
|
PACKET_AW_CLOSE;
|
|
#endif // _NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE
|
|
|
|
//#ifdef _PCBANG_POLICY_CHANGE_POST_EXPIRED
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STATUS_PCBANG_BILLING_NTF)
|
|
DWORD m_PcRoomId; // ReservedValue
|
|
#ifdef _NA_006413_20130201_PREMIUMSERVICE_ITEM
|
|
DWORD premiumservice_;
|
|
#endif //_NA_006413_20130201_PREMIUMSERVICE_ITEM
|
|
PACKET_AW_CLOSE;
|
|
//#endif
|
|
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_DOMINATION_RETURNHIEM_CMD)
|
|
CHARGUID m_CharGuid; // 캐릭터 Guid
|
|
eSYSTEM_MEMO_TYPE m_Type; // 타입
|
|
ULONGLONG m_TenderCost; // 입찰 하임 | 왕의 증표 갯수
|
|
PACKET_AW_CLOSE;
|
|
|
|
//_NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_SYSTEMMEMO_SEND_CMD)
|
|
DWORD system_memo_list_num_;//시스템 메모 갯수
|
|
BasicSystemMemoInfo system_memo_info_[MAX_SYSTEM_MEMO_LIST];//시스템 메모 정보 리스트
|
|
|
|
uint16_t GetSize() const
|
|
{
|
|
assert(system_memo_list_num_ <= _countof(system_memo_info_));
|
|
const size_t kMinSize = sizeof(*this) - sizeof(system_memo_info_);
|
|
return static_cast<uint16_t>(kMinSize + //고정 크기
|
|
(sizeof(system_memo_info_[0]) * system_memo_list_num_)); //가변 크기
|
|
}
|
|
PACKET_AW_CLOSE;
|
|
|
|
// declared by _NA002676_WORLD_SERVER_RENEWAL
|
|
PACKET_AW_OPEN(AW_USER_STATUS, AW_USER_STADING_POSITION_CMD)
|
|
static const DWORD kMaxNumberOfNodes = MSG_AG_PARTY_NAVI_INFO_BRD::MAX_OBJECT_ARRAY_SIZE;
|
|
struct Node {
|
|
DWORD user_guid;
|
|
int16_t pos_x;
|
|
int16_t pos_y;
|
|
};
|
|
uint8_t paddings_0_;
|
|
uint8_t number_of_nodes;
|
|
Node nodes[kMaxNumberOfNodes];
|
|
uint16_t GetSize() const
|
|
{
|
|
const size_t kMinSize = sizeof(*this) - sizeof(nodes);
|
|
return static_cast<uint16_t>(kMinSize + sizeof(nodes[0]) * number_of_nodes);
|
|
};
|
|
PACKET_AW_CLOSE;
|
|
//==========================================================================================
|
|
|
|
// AW_PARTY_PROTOCOL 카테고리
|
|
|
|
// 파티 결성
|
|
PACKET_AW_OPEN(AW_PARTY, AW_PARTY_MAKE_SYN)
|
|
WORD wPartyKey; // 파티 키
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 파티 가입
|
|
PACKET_AW_OPEN(AW_PARTY, AW_PARTY_JOIN_MEMBER_SYN)
|
|
WORD wPartyKey; // 파티 키
|
|
CHARGUID m_CharGUID; // 가입할 캐릭터 GUID
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 파티 탈퇴
|
|
PACKET_AW_OPEN(AW_PARTY, AW_PARTY_WITHDRAW_MEMBER_SYN)
|
|
WORD wPartyKey; // 파티 키
|
|
CHARGUID m_CharGUID; // 나갈 캐릭터 GUID
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 파티 해산
|
|
PACKET_AW_OPEN(AW_PARTY, AW_PARTY_DESTROY_SYN)
|
|
WORD wPartyKey; // 파티 키
|
|
PACKET_AW_CLOSE;
|
|
|
|
#ifdef _NA_004694_20120412_1202_PARTY_ROOM_KEY
|
|
// 룸키 설정
|
|
PACKET_AW_OPEN(AW_PARTY, AW_PARTY_ROOM_KEY_SYN)
|
|
WORD party_key_; // 파티 키
|
|
WORD room_key_; // 룸 키
|
|
PACKET_AW_CLOSE;
|
|
#endif // _NA_004694_20120412_1202_PARTY_ROOM_KEY
|
|
|
|
// AW_GM_PROTOCOL 카테고리
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_WHISPER_SET_CMD)
|
|
BOOL m_bOn; // FALSE: 귓말 끔 TRUE: 귓말 켬
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_USERCHAT_BLOCK_CMD)
|
|
CHARGUID m_CharGuid; // 해당 사용자 CharGuid
|
|
BOOL m_bBlock; // FALSE: 채팅 허용 TRUE: 채팅 금지
|
|
DWORD m_dwBlockTime; // 채팅 금지일 경우 제한시간(분 단위)
|
|
//__NA_000313_20070223_REALTIME_CHAT_BLOCK
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_NOTICE_CMD)
|
|
eNOTICE_TYPE m_eType;
|
|
WORD m_wLen;
|
|
TCHAR m_tszNoticeMsg[MAX_NOTICE_LEN + 1];
|
|
|
|
uint16 GetSize() const
|
|
{ // CHANGES: f101210.2L
|
|
const size_t kMinSize = sizeof(*this) - sizeof(m_tszNoticeMsg);
|
|
return static_cast<uint16_t>(kMinSize + m_wLen * sizeof(m_tszNoticeMsg[0]));
|
|
}
|
|
PACKET_AW_CLOSE;
|
|
|
|
// declared by __NA_001359_20090619_HEIM_LOTTO_SYSTEM = { AW_GM_LOTTO_~ }
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_LOTTO_NUM_CMD)
|
|
DWORD dwUserKey;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_LOTTO_SETTLE_CMD)
|
|
DWORD dwUserKey;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_GM, AW_GM_LOTTO_FUND_CMD)
|
|
DWORD user_key;
|
|
INT64 amount_delta;
|
|
PACKET_AW_CLOSE;
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// AW_FRIENDINVITATE 프로토콜 시작
|
|
//----------------------------------------------------------------------------------
|
|
//W->A 초대한 캐릭터 목록 (가변)
|
|
PACKET_AW_OPEN(AW_FRIENDINVITATE, AW_FRIENDINVITATE_INVITATELIST_CMD)
|
|
INVITATEFRIENDLIST_INFO m_InvitateFriendListInfo;
|
|
|
|
WORD GetSize() const
|
|
{ // (CHANGES) (f100624.2L)
|
|
const WORD kMinSize = sizeof(*this) - sizeof(m_InvitateFriendListInfo);
|
|
return static_cast<WORD>(kMinSize + m_InvitateFriendListInfo.GetSize());
|
|
//return (sizeof(MSG_AW_FRIENDINVITATE_INVITATELIST_CMD) - ((MAX_FRIEND_STAT_NUM - m_InvitateFriendListInfo.m_byListCount) * sizeof(DWORD)));
|
|
}
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_FRIENDINVITATE, AW_FRIEND_INVITATIONR_INSERT_CMD)
|
|
STRUCT_FRIEND_INVITATE_INFO InvitateInfo;
|
|
PACKET_AW_CLOSE;
|
|
//----------------------------------------------------------------------------------
|
|
// AW_FRIENDINVITATE 프로토콜 끝
|
|
//----------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// AW_CHAO 관련 프로토콜
|
|
//----------------------------------------------------------------------------------
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REQUEST_REVENGEINFO_SYN)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
PACKET_AW_CLOSE;
|
|
|
|
|
|
// 리벤지 정보 전달(가변)
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REQUEST_REVENGEINFO_ACK)
|
|
DWORD m_dwCharGuid; // 요청한 캐릭터의 CharGuid
|
|
BYTE m_byRevengePoint; // 남은 Revenge Point
|
|
BYTE m_byRevengeStatNum;
|
|
STRUCT_REVENGE_INFO m_sRevengeUserInfo[MAX_REVENGE_STAT_NUM]; // 등록된 캐릭터 목록
|
|
|
|
uint16_t GetSize() const {
|
|
const size_t kMinSize = sizeof(*this) - sizeof(m_sRevengeUserInfo);
|
|
return static_cast<uint16_t>(kMinSize + sizeof(m_sRevengeUserInfo[0]) * m_byRevengeStatNum);
|
|
};
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REQUEST_REVENGEINFO_NAK)
|
|
DWORD m_dwCharGuid; // 요청한 캐릭터의 CharGuid
|
|
BYTE m_byErrorCode; // 요청 실패한 이유(0: 알 수 없는 에러 1: 대상이 WorldServer에 연결되어 있지 않음)
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 클라이언트가 리벤지 리스트 삭제 요청했음(W->A)
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REMOVE_REVENGE_CHAR_CMD)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
DWORD m_dwRevengeCharGuid; // 삭제할 리벤지(나쁜친구) CharGuid
|
|
PACKET_AW_CLOSE;
|
|
|
|
// A->로 PK 성공했으니 리벤지 리스트 삭제 요청
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REMOVE_REVENGE_CHAR_SYN)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
DWORD m_dwRevengeCharGuid; // 삭제할 리벤지(나쁜친구) CharGuid
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REMOVE_REVENGE_CHAR_ACK)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
DWORD m_dwRevengeCharGuid; // 삭제할 리벤지(나쁜친구) CharGuid
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_REMOVE_REVENGE_CHAR_NAK)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
BYTE m_byErrorCode; // eREVENGE_RESULT 참고
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 리벤지 대상 추가 요청
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_ADD_REVENGE_CHAR_SYN)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; // 리벤지 리스트에 추가할 대상 Name
|
|
// 로그아웃 중이라도 추가가 되어야 하므로 m_dwRevengeCharGuid 대신 이름을 사용한다.
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_ADD_REVENGE_CHAR_ACK)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
DWORD m_dwRevengeCharGuid; // 추가할 리벤지(나쁜친구) CharGuid
|
|
TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; // 리벤지 리스트에 추가한 대상 Name
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_CHAO, AW_CHAO_ADD_REVENGE_CHAR_NAK)
|
|
DWORD m_dwCharGuid; // 요청하는 본인 CharGuid
|
|
BYTE m_byErrorCode; // eREVENGE_RESULT 참고
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 스페셜 아이템 소유 변경
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_CHANGE_SPECIAL_ITEM_OWN_CMD)
|
|
enum { MAX_SPECIAL_ITEM_COUNT = 30 };
|
|
DWORD m_dwCharGuid;
|
|
BYTE m_Count;
|
|
SPECIAL_ITEM_OWN_INFO m_ItemInfo[MAX_SPECIAL_ITEM_COUNT];
|
|
|
|
uint16_t GetSize() const {
|
|
const size_t kMinSize = sizeof(*this) - sizeof(m_ItemInfo);
|
|
return static_cast<uint16_t>(kMinSize + sizeof(m_ItemInfo[0]) * m_Count);
|
|
};
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 스페셜 아이템 요청(W -> A)
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_CHANGE_SPECIAL_ITEM_SYN)
|
|
DWORD m_dwUserGuid;
|
|
PACKET_AW_CLOSE;
|
|
|
|
// 스페셜 아이템 클리어 명령(A->W)
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_SPECIAL_ITEM_CLEAR_CMD)
|
|
DWORD m_dwCharGuid;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_USE_DECREE_ITEM_SYN)
|
|
DWORD m_dwCharGuid;
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_USE_DECREE_ITEM_ACK)
|
|
PACKET_AW_CLOSE;
|
|
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_USE_DECREE_ITEM_NAK)
|
|
BYTE m_byErrorCode;
|
|
PACKET_AW_CLOSE;
|
|
|
|
#ifdef _NA_20101011_HEIM_LOTTO_CASH_TICKET
|
|
// A->W 하임행운 캐시 응모권 사용 요청
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_USE_HEIM_LOTTO_TICKET_SYN)
|
|
CHARGUID char_guid; // 캐릭터 ID
|
|
SLOTIDX index;
|
|
POSTYPE pos;
|
|
PACKET_AW_CLOSE;
|
|
|
|
// W->A 하임행운 캐시 응모권 사용 응답
|
|
PACKET_AW_OPEN(AW_ITEM, AW_ITEM_USE_HEIM_LOTTO_TICKET_ACK)
|
|
WORD result_code; // 결과 코드 : eITEM_RESULT
|
|
CHARGUID char_guid; // 캐릭터 ID
|
|
SLOTIDX index;
|
|
POSTYPE pos;
|
|
PACKET_AW_CLOSE;
|
|
#endif // _NA_20101011_HEIM_LOTTO_CASH_TICKET
|
|
|
|
#ifndef __SSQ_MSG_HDR__
|
|
#define __SSQ_MSG_HDR__
|
|
// <Prototype of WAR_MSG_HDR>
|
|
// 전체 메시지의 길이가 담겨진다. (variable stream)
|
|
struct WAR_MSG_HDR
|
|
{
|
|
typedef ulong MSG_SIZE_T; // expanded by _NA001605_EP2_CHANGE_SKILL_BROADCASTER_
|
|
MSG_SIZE_T size;
|
|
};
|
|
|
|
// <Raw Header of Each Message>
|
|
// - 각 메시지의 타입들이 기재된다.
|
|
// - 1Byte, 하지만 raw stream인 WAR_TAG_V의 이것을 직접 사용하는 경우는 없어야 한다.
|
|
// (이것 common routine에서의 offset연산 편의성이 목적이다.)
|
|
// 모든 메시지들은 실질적으로 WAR_TAG1_<id, type>을 상속해서 구현되게 되어 있다.
|
|
// <목적>
|
|
// - Server/Client 각각 pointer연산을 수행하면서 버그를 유발할 수 있다.
|
|
// 하나의 로직으로 serializing input/output이 가능해지도록 하는 것이 목표다.
|
|
typedef struct WAR_TAG_V
|
|
{
|
|
BYTE _TAG;
|
|
} *WAR_TAG_P;
|
|
#endif
|
|
|
|
PACKET_AW_OPEN(AW_OPERATION, AW_OPERATION_ROOM_CTRL_CMD)
|
|
WAR_MSG_HDR m_Header[1]; // Stream Header, next pointer is data stream
|
|
uint16_t GetSize() const
|
|
{ return static_cast<uint16_t>(sizeof(*this) + m_Header->size); }
|
|
PACKET_AW_CLOSE;
|
|
|
|
|
|
PACKET_AW_OPEN(AW_CONNECTION, AW_ABUSING_USER_VERIFY_QUERY_CMD)
|
|
CHARGUID m_CharGuid; // 요청하는 본인 CharGuid
|
|
eABUSE_SUB_TYPE m_eAbuseSubType;
|
|
PACKET_AW_CLOSE;
|
|
|
|
// USERCOUNT_SYN은 월드 서버 자체에서 집계하기로 수정하고, USERMONEY_SYN은 GM으로 옮겼음
|
|
/*
|
|
// AW_USER_OPERATION 카테고리
|
|
struct MSG_AW_USERCOUNT_SYN : public MSG_BASE_FORWARD
|
|
{
|
|
MSG_AW_USERCOUNT_SYN() { m_byCategory = AW_OPERATION; m_byProtocol = AW_USERCOUNT_SYN; }
|
|
DWORD dwVillageUserCount; // 마을존 개수
|
|
DWORD dwHuntingLobbyZoneCount; // Hunting로비방 개수
|
|
DWORD dwHuntingLobbyUserCount; // Hunting로비방 총 동접
|
|
DWORD dwMissionLobbyZoneCount; // Mission로비방 개수
|
|
DWORD dwMissionLobbyUserCount; // Mission로비방 총 동접
|
|
DWORD dwPVPLobbyZoneCount; // PVP로비방 개수
|
|
DWORD dwPVPLobbyUserCount; // PVP로비방 총 동접
|
|
DWORD dwHuntingZoneCount; // 헌팅방 개수
|
|
DWORD dwHuntingUserCount; // 헌팅방 총 동접
|
|
DWORD dwMissionZoneCount; // 미션방 개수
|
|
DWORD dwMissionUserCount; // 미션방 총 동접
|
|
DWORD dwPVPZoneCount; // PVP존 개수
|
|
DWORD dwPVPUserCount; // PVP존 총 동접
|
|
DWORD GetTotalUserNum()
|
|
{
|
|
return dwVillageUserCount
|
|
+dwHuntingLobbyUserCount
|
|
+dwMissionLobbyUserCount
|
|
+dwPVPLobbyUserCount
|
|
+dwHuntingUserCount
|
|
+dwMissionUserCount
|
|
+dwPVPUserCount;
|
|
}
|
|
};
|
|
|
|
struct MSG_AW_USERMONEY_SYN : public MSG_BASE_FORWARD
|
|
{
|
|
MSG_AW_USERMONEY_SYN() { m_byCategory = AW_OPERATION; m_byProtocol = AW_USERMONEY_SYN; }
|
|
|
|
DWORD dwTotalGetMoney; // 일정 시간 동안 생겨난 돈 총계
|
|
DWORD dwTotalLoseMoney; // 일정 시간 동안 없어진 돈 총계
|
|
DWORD dwTotalUserMoney; // 현재 동접 유저들이 갖고 있는 평균 금액
|
|
};
|
|
*/
|
|
|
|
//==================================================================================================
|
|
#pragma pack(pop)
|
|
//==================================================================================================
|
|
|
|
|
|
#endif //SERVERCOMMON_PACKET_STRUCT_AW_H
|