/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Additional permissions under GNU GPL version 3 section 7

If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/
/*****************************************************************************
*
*   $/Plasma20/Sources/Plasma/NucleusLib/pnNetProtocol/Private/Protocols/pnNpCli2Auth.h
*   
***/

#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETPROTOCOL_PRIVATE_PROTOCOLS_PNNPCLI2AUTH_H
#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetProtocol/Private/Protocols/pnNpCli2Auth.h included more than once"
#endif
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETPROTOCOL_PRIVATE_PROTOCOLS_PNNPCLI2AUTH_H


// kNetProtocolCli2Auth messages (must be <= (word)-1)
enum {
    // Global
    kCli2Auth_PingRequest,

    // Client
    kCli2Auth_ClientRegisterRequest,
    kCli2Auth_ClientSetCCRLevel,

    // Account
    kCli2Auth_AcctLoginRequest,
    kCli2Auth_AcctSetEulaVersion,
    kCli2Auth_AcctSetDataRequest,
    kCli2Auth_AcctSetPlayerRequest,
    kCli2Auth_AcctCreateRequest,
    kCli2Auth_AcctChangePasswordRequest,
    kCli2Auth_AcctSetRolesRequest,
    kCli2Auth_AcctSetBillingTypeRequest,
    kCli2Auth_AcctActivateRequest,
    kCli2Auth_AcctCreateFromKeyRequest,
    
    // Player
    kCli2Auth_PlayerDeleteRequest,
    kCli2Auth_PlayerUndeleteRequest,
    kCli2Auth_PlayerSelectRequest,
    kCli2Auth_PlayerRenameRequest,
    kCli2Auth_PlayerCreateRequest,
    kCli2Auth_PlayerSetStatus,
    kCli2Auth_PlayerChat,
    kCli2Auth_UpgradeVisitorRequest,
    kCli2Auth_SetPlayerBanStatusRequest,
    kCli2Auth_KickPlayer,
    kCli2Auth_ChangePlayerNameRequest,
    kCli2Auth_SendFriendInviteRequest,

    // Vault
    kCli2Auth_VaultNodeCreate,
    kCli2Auth_VaultNodeFetch,
    kCli2Auth_VaultNodeSave,
    kCli2Auth_VaultNodeDelete,
    kCli2Auth_VaultNodeAdd,
    kCli2Auth_VaultNodeRemove,
    kCli2Auth_VaultFetchNodeRefs,
    kCli2Auth_VaultInitAgeRequest,
    kCli2Auth_VaultNodeFind,
    kCli2Auth_VaultSetSeen,
    kCli2Auth_VaultSendNode,

    // Ages
    kCli2Auth_AgeRequest,

    // File-related
    kCli2Auth_FileListRequest,
    kCli2Auth_FileDownloadRequest,
    kCli2Auth_FileDownloadChunkAck,

    // Game
    kCli2Auth_PropagateBuffer,
    

    // Public ages    
    kCli2Auth_GetPublicAgeList,
    kCli2Auth_SetAgePublic,

    // Log Messages
    kCli2Auth_LogPythonTraceback,
    kCli2Auth_LogStackDump,
    kCli2Auth_LogClientDebuggerConnect,
    
    // Score
    kCli2Auth_ScoreCreate,
    kCli2Auth_ScoreDelete,
    kCli2Auth_ScoreGetScores,
    kCli2Auth_ScoreAddPoints,
    kCli2Auth_ScoreTransferPoints,
    kCli2Auth_ScoreSetPoints,
    kCli2Auth_ScoreGetRanks,

    kCli2Auth_AccountExistsRequest,

    kNumCli2AuthMessages
};
COMPILER_ASSERT_HEADER(Cli2Auth, kNumCli2AuthMessages <= (word)-1);

enum {
    // Global
    kAuth2Cli_PingReply,
    kAuth2Cli_ServerAddr,
    kAuth2Cli_NotifyNewBuild,

    // Client
    kAuth2Cli_ClientRegisterReply,

    // Account
    kAuth2Cli_AcctLoginReply,
    kAuth2Cli_AcctData,
    kAuth2Cli_AcctPlayerInfo,
    kAuth2Cli_AcctSetPlayerReply,
    kAuth2Cli_AcctCreateReply,
    kAuth2Cli_AcctChangePasswordReply,
    kAuth2Cli_AcctSetRolesReply,
    kAuth2Cli_AcctSetBillingTypeReply,
    kAuth2Cli_AcctActivateReply,
    kAuth2Cli_AcctCreateFromKeyReply,
    
    // Player
    kAuth2Cli_PlayerList,
    kAuth2Cli_PlayerChat,
    kAuth2Cli_PlayerCreateReply,
    kAuth2Cli_PlayerDeleteReply,
    kAuth2Cli_UpgradeVisitorReply,
    kAuth2Cli_SetPlayerBanStatusReply,
    kAuth2Cli_ChangePlayerNameReply,
    kAuth2Cli_SendFriendInviteReply,

    // Friends
    kAuth2Cli_FriendNotify,

    // Vault
    kAuth2Cli_VaultNodeCreated,
    kAuth2Cli_VaultNodeFetched,
    kAuth2Cli_VaultNodeChanged,
    kAuth2Cli_VaultNodeDeleted,
    kAuth2Cli_VaultNodeAdded,
    kAuth2Cli_VaultNodeRemoved,
    kAuth2Cli_VaultNodeRefsFetched,
    kAuth2Cli_VaultInitAgeReply,
    kAuth2Cli_VaultNodeFindReply,
    kAuth2Cli_VaultSaveNodeReply,
    kAuth2Cli_VaultAddNodeReply,
    kAuth2Cli_VaultRemoveNodeReply,

    // Ages
    kAuth2Cli_AgeReply,

    // File-related
    kAuth2Cli_FileListReply,
    kAuth2Cli_FileDownloadChunk,

    // Game
    kAuth2Cli_PropagateBuffer,
    
    // Admin
    kAuth2Cli_KickedOff,

    // Public ages    
    kAuth2Cli_PublicAgeList,

    // Score
    kAuth2Cli_ScoreCreateReply,
    kAuth2Cli_ScoreDeleteReply,
    kAuth2Cli_ScoreGetScoresReply,
    kAuth2Cli_ScoreAddPointsReply,
    kAuth2Cli_ScoreTransferPointsReply,
    kAuth2Cli_ScoreSetPointsReply,
    kAuth2Cli_ScoreGetRanksReply,

    kAuth2Cli_AccountExistsReply,

    kNumAuth2CliMessages
};
COMPILER_ASSERT_HEADER(Cli2Auth, kNumAuth2CliMessages <= (word)-1);


//============================================================================
// BEGIN PACKED DATA STRUCTURES
//============================================================================
#include <PshPack1.h>


/*****************************************************************************
*
*   Cli2Auth connect packet
*
***/

struct Cli2Auth_ConnData {
    dword       dataBytes;
    Uuid        token;
};
struct Cli2Auth_Connect {
    AsyncSocketConnectPacket    hdr;
    Cli2Auth_ConnData           data;
};


/*****************************************************************************
*
*   Cli2Auth message structures
*
***/

// PingRequest
extern const NetMsg kNetMsg_Cli2Auth_PingRequest;
struct Cli2Auth_PingRequest {
    dword       messageId;
    dword       pingTimeMs;
    dword       transId;
    dword       payloadBytes;
    byte        payload[1]; // [payloadBytes]
};

// ClientRegisterRequest
extern const NetMsg kNetMsg_Cli2Auth_ClientRegisterRequest;
struct Cli2Auth_ClientRegisterRequest {
    dword       messageId;
    dword       buildId;
};

// AccountExists
extern const NetMsg kNetMsg_Cli2Auth_AccountExistsRequest;
struct Cli2Auth_AccountExistsRequest {
    dword messageId;
    dword transId;
    wchar accountName[kMaxAccountNameLength];
};

// LoginRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctLoginRequest;
struct Cli2Auth_AcctLoginRequest {
    dword       messageId;
    dword       transId;
    dword       clientChallenge;
    wchar       acctName[kMaxAccountNameLength];
    ShaDigest   challengeHash;
    wchar       authToken[kMaxPublisherAuthKeyLength];
    wchar       os[kMaxGTOSIdLength];
};

// AgeRequest
extern const NetMsg kNetMsg_Cli2Auth_AgeRequest;
struct Cli2Auth_AgeRequest {
    dword       messageId;
    dword       transId;
    wchar       ageName[kMaxAgeNameLength];
    Uuid        ageUuid;
};

// AcctCreateRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctCreateRequest;
struct Cli2Auth_AcctCreateRequest {
    dword       messageId;
    dword       transId;
    wchar       accountName[kMaxAccountNameLength];
    ShaDigest   namePassHash;
    dword       accountFlags;
    dword       billingType;
};

// AcctCreateFromKeyRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctCreateFromKeyRequest;
struct Cli2Auth_AcctCreateFromKeyRequest {
    dword       messageId;
    dword       transId;
    wchar       accountName[kMaxAccountNameLength];
    ShaDigest   namePassHash;
    Uuid        key;
    dword       billingType;
};

// CreatePlayerRequest
extern const NetMsg kNetMsg_Cli2Auth_PlayerCreateRequest;
struct Cli2Auth_PlayerCreateRequest {
    dword       messageId;
    dword       transId;
    wchar       playerName[kMaxPlayerNameLength];
    wchar       avatarShape[MAX_PATH];
    wchar       friendInvite[MAX_PATH];
};

extern const NetMsg kNetMsg_Cli2Auth_PlayerDeleteRequest;
struct Cli2Auth_PlayerDeleteRequest {
    dword       messageId;
    dword       transId;
    dword       playerId;
};

extern const NetMsg kNetMsg_Cli2Auth_UpgradeVisitorRequest;
struct Cli2Auth_UpgradeVisitorRequest {
    dword       messageId;
    dword       transId;
    dword       playerId;
};

// SetPlayerRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctSetPlayerRequest;
struct Cli2Auth_AcctSetPlayerRequest {
    dword       messageId;
    dword       transId;
    dword       playerInt;
};

// ChangePasswordRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctChangePasswordRequest;
struct Cli2Auth_AcctChangePasswordRequest {
    dword       messageId;
    dword       transId;
    wchar       accountName[kMaxAccountNameLength];
    ShaDigest   namePassHash;
};

// AcctSetRolesRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctSetRolesRequest;
struct Cli2Auth_AcctSetRolesRequest {
    dword       messageId;
    dword       transId;
    wchar       accountName[kMaxAccountNameLength];
    dword       accountFlags;
};

// AcctSetBillingTypeRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctSetBillingTypeRequest;
struct Cli2Auth_AcctSetBillingTypeRequest {
    dword       messageId;
    dword       transId;
    wchar       accountName[kMaxAccountNameLength];
    dword       billingType;
};

// AcctActivateRequest
extern const NetMsg kNetMsg_Cli2Auth_AcctActivateRequest;
struct Cli2Auth_AcctActivateRequest {
    dword       messageId;
    dword       transId;
    Uuid        activationKey;
};

// FileListRequest
extern const NetMsg kNetMsg_Cli2Auth_FileListRequest;
struct Cli2Auth_FileListRequest {
    dword       messageId;
    dword       transId;
    wchar       directory[MAX_PATH];
    wchar       ext[MAX_EXT];
};

// FileDownloadRequest
extern const NetMsg kNetMsg_Cli2Auth_FileDownloadRequest;
struct Cli2Auth_FileDownloadRequest {
    dword       messageId;
    dword       transId;
    wchar       filename[MAX_PATH];
};

// FileDownloadChunkAck
extern const NetMsg kNetMsg_Cli2Auth_FileDownloadChunkAck;
struct Cli2Auth_FileDownloadChunkAck {
    dword       messageId;
    dword       transId;
};

// VaultFetchNodeRefs
extern const NetMsg kNetMsg_Cli2Auth_VaultFetchNodeRefs;
struct Cli2Auth_VaultFetchNodeRefs {
    dword       messageId;
    dword       transId;
    dword       nodeId;
};

// VaultNodeAdd
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeAdd;
struct Cli2Auth_VaultNodeAdd {
    dword       messageId;
    dword       transId;
    dword       parentId;
    dword       childId;
    dword       ownerId;
};

// VaultNodeRemove
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeRemove;
struct Cli2Auth_VaultNodeRemove {
    dword       messageId;
    dword       transId;
    dword       parentId;
    dword       childId;
};

// VaultNodeSave
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeSave;
struct Cli2Auth_VaultNodeSave {
    dword       messageId;
    dword       transId;
    dword       nodeId;
    Uuid        revisionId;
    dword       nodeBytes;
    byte        nodeBuffer[1];
};

// VaultNodeCreate
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeCreate;
struct Cli2Auth_VaultNodeCreate {
    dword       messageId;
    dword       transId;
    dword       nodeBytes;
    byte        nodeBuffer[1];
};

// VaultNodeFetch
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeFetch;
struct Cli2Auth_VaultNodeFetch {
    dword       messageId;
    dword       transId;
    dword       nodeId;
};

// VaultInitAgeRequest
extern const NetMsg kNetMsg_Cli2Auth_VaultInitAgeRequest;
struct Cli2Auth_VaultInitAgeRequest {
    dword       messageId;
    dword       transId;
    Uuid        ageInstId;
    Uuid        parentAgeInstId;
    wchar       ageFilename[MAX_PATH];
    wchar       ageInstName[MAX_PATH];
    wchar       ageUserName[MAX_PATH];
    wchar       ageDesc[1024];
    dword       ageSequenceNumber;
    dword       ageLanguage;
};

// VaultNodeFind
extern const NetMsg kNetMsg_Cli2Auth_VaultNodeFind;
struct Cli2Auth_VaultNodeFind {
    dword       messageId;
    dword       transId;
    dword       nodeBytes;
    byte        nodeBuffer[1];
};

// VaultSetSeen
extern const NetMsg kNetMsg_Cli2Auth_VaultSetSeen;
struct Cli2Auth_VaultSetSeen {
    dword       messageId;
    dword       parentId;
    dword       childId;
    byte        seen;
};

// VaultSendNode
extern const NetMsg kNetMsg_Cli2Auth_VaultSendNode;
struct Cli2Auth_VaultSendNode {
    dword       messageId;
    dword       srcNodeId;
    dword       dstPlayerId;
};

// GetPublicAgeList
extern const NetMsg kNetMsg_Cli2Auth_GetPublicAgeList;
struct Cli2Auth_GetPublicAgeList {
    dword       messageId;
    dword       transId;
    wchar       ageFilename[kMaxAgeNameLength];
};

extern const NetMsg kNetMsg_Cli2Auth_SetAgePublic;
struct Cli2Auth_SetAgePublic {
    dword       messageId;
    dword       ageInfoId;
    byte        publicOrNot;
};

// PropagateBuffer
extern const NetMsg kNetMsg_Cli2Auth_PropagateBuffer;
struct Cli2Auth_PropagateBuffer {
    dword       messageId;
    dword       type;
    dword       bytes;
    byte        buffer[1];  // [bytes], actually
    // no more fields
};

extern const NetMsg kNetMsg_Cli2Auth_ClientSetCCRLevel;
struct Cli2Auth_ClientSetCCRLevel {
    dword       messageId;
    dword       ccrLevel;
};

extern const NetMsg kNetMsg_Cli2Auth_LogPythonTraceback;
struct Cli2Auth_LogPythonTraceback {
    dword messageId;
    wchar traceback[1024];
};

extern const NetMsg kNetMsg_Cli2Auth_LogStackDump;
struct Cli2Auth_LogStackDump {
    dword messageId;
    wchar stackdump[1024];
};

extern const NetMsg kNetMsg_Cli2Auth_LogClientDebuggerConnect;
struct Cli2Auth_LogClientDebuggerConnect {
    dword   messageId;
};

extern const NetMsg kNetMsg_Cli2Auth_SetPlayerBanStatusRequest;
struct Cli2Auth_SetPlayerBanStatusRequest {
    dword messageId;
    dword transId;
    dword playerId;
    dword banned;
};

extern const NetMsg kNetMsg_Cli2Auth_KickPlayer;
struct Cli2Auth_KickPlayer {
    dword messageId;
    dword playerId;
};

extern const NetMsg kNetMsg_Cli2Auth_ChangePlayerNameRequest;
struct Cli2Auth_ChangePlayerNameRequest {
    dword messageId;
    dword transId;
    dword playerId;
    wchar newName[kMaxPlayerNameLength];
};

extern const NetMsg kNetMsg_Cli2Auth_SendFriendInviteRequest;
struct Cli2Auth_SendFriendInviteRequest {
    dword   messageId;
    dword   transId;
    Uuid    inviteUuid;
    wchar   emailAddress[kMaxEmailAddressLength];
    wchar   toName[kMaxPlayerNameLength];
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreCreate;
struct Cli2Auth_ScoreCreate {
    dword messageId;
    dword transId;
    dword ownerId;
    wchar gameName[kMaxGameScoreNameLength];
    dword gameType;
    dword scoreValue;
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreDelete;
struct Cli2Auth_ScoreDelete {
    dword messageId;
    dword transId;
    dword scoreId;
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreGetScores;
struct Cli2Auth_ScoreGetScores {
    dword messageId;
    dword transId;
    dword ownerId;
    wchar gameName[kMaxGameScoreNameLength];
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreAddPoints;
struct Cli2Auth_ScoreAddPoints {
    dword messageId;
    dword transId;
    dword scoreId;
    dword numPoints;
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreTransferPoints;
struct Cli2Auth_ScoreTransferPoints {
    dword messageId;
    dword transId;
    dword srcScoreId;
    dword destScoreId;
    dword numPoints;
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreSetPoints;
struct Cli2Auth_ScoreSetPoints {
    dword messageId;
    dword transId;
    dword scoreId;
    dword numPoints;
};

extern const NetMsg kNetMsg_Cli2Auth_ScoreGetRanks;
struct Cli2Auth_ScoreGetRanks {
    dword messageId;
    dword transId;
    dword ownerId;
    dword scoreGroup;
    dword parentFolderId;
    wchar gameName[kMaxGameScoreNameLength];
    dword timePeriod;
    dword numResults;
    dword pageNumber;
    dword sortDesc;
};


/*****************************************************************************
*
*   Auth2Cli message structures
*
***/

// PingReply
extern const NetMsg kNetMsg_Auth2Cli_PingReply;
struct Auth2Cli_PingReply {
    dword       messageId;
    dword       pingTimeMs;
    dword       transId;
    dword       payloadBytes;
    byte        payload[1]; // [payloadBytes]
};

// ClientRegisterReply
extern const NetMsg kNetMsg_Auth2Cli_ClientRegisterReply;
struct Auth2Cli_ClientRegisterReply {
    dword       messageId;
    dword       serverChallenge;
};

// AccountExists
extern const NetMsg kNetMsg_Auth2Cli_AccountExistsReply;
struct Auth2Cli_AccountExistsReply {
    dword       messageId;
    dword       transId;
    ENetError   result;
    byte        exists;
};

// ServerAddr
extern const NetMsg kNetMsg_Auth2Cli_ServerAddr;
struct Auth2Cli_ServerAddr {
    dword           messageId;
    NetAddressNode  srvAddr;
    Uuid            token;
};

extern const NetMsg kNetMsg_Auth2Cli_NotifyNewBuild;
struct Auth2Cli_NotifyNewBuild {
    dword           foo;        // msgs must have at least one field
};

// AcctPlayerInfo
extern const NetMsg kNetMsg_Auth2Cli_AcctPlayerInfo;
struct Auth2Cli_AcctPlayerInfo {
    dword       messageId;
    dword       transId;
    dword       playerInt;
    wchar       playerName[kMaxPlayerNameLength];
    wchar       avatarShape[kMaxVaultNodeStringLength];
    dword       explorer;
};

// LoginReply
extern const NetMsg kNetMsg_Auth2Cli_AcctLoginReply;
struct Auth2Cli_AcctLoginReply {
    dword       messageId;
    dword       transId;
    ENetError   result;
    Uuid        accountId;
    dword       accountFlags;
    dword       billingType;
    dword       encryptionKey[4];
};

// AgeReply
extern const NetMsg kNetMsg_Auth2Cli_AgeReply;
struct Auth2Cli_AgeReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           ageMcpId;
    Uuid            ageInstId;
    dword           ageVaultId;
    NetAddressNode  gameSrvNode;
};

// AcctCreateReply
extern const NetMsg kNetMsg_Auth2Cli_AcctCreateReply;
struct Auth2Cli_AcctCreateReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    Uuid            accountId;
};

// AcctCreateFromKeyReply
extern const NetMsg kNetMsg_Auth2Cli_AcctCreateFromKeyReply;
struct Auth2Cli_AcctCreateFromKeyReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    Uuid            accountId;
    Uuid            activationKey;
};

// CreatePlayerReply
extern const NetMsg kNetMsg_Auth2Cli_PlayerCreateReply;
struct Auth2Cli_PlayerCreateReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           playerInt;
    dword           explorer;
    wchar           playerName[kMaxPlayerNameLength];
    wchar           avatarShape[kMaxVaultNodeStringLength];
};

// DeletePlayerReply
extern const NetMsg kNetMsg_Auth2Cli_PlayerDeleteReply;
struct Auth2Cli_PlayerDeleteReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// DeletePlayerReply
extern const NetMsg kNetMsg_Auth2Cli_UpgradeVisitorReply;
struct Auth2Cli_UpgradeVisitorReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// SetPlayerReply
extern const NetMsg kNetMsg_Auth2Cli_AcctSetPlayerReply;
struct Auth2Cli_AcctSetPlayerReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// AcctChangePasswordReply
extern const NetMsg kNetMsg_Auth2Cli_AcctChangePasswordReply;
struct Auth2Cli_AcctChangePasswordReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// AcctSetRolesReply
extern const NetMsg kNetMsg_Auth2Cli_AcctSetRolesReply;
struct Auth2Cli_AcctSetRolesReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// AcctSetBillingTypeReply
extern const NetMsg kNetMsg_Auth2Cli_AcctSetBillingTypeReply;
struct Auth2Cli_AcctSetBillingTypeReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// AcctActivateReply
extern const NetMsg kNetMsg_Auth2Cli_AcctActivateReply;
struct Auth2Cli_AcctActivateReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// FileListReply
extern const NetMsg kNetMsg_Auth2Cli_FileListReply;
struct Auth2Cli_FileListReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           wcharCount;
    wchar           fileData[1];        // [wcharCount], actually
    // no more fields
};

// FileDownloadChunk
extern const NetMsg kNetMsg_Auth2Cli_FileDownloadChunk;
struct Auth2Cli_FileDownloadChunk {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           fileSize;
    dword           chunkOffset;
    dword           chunkSize;
    byte            chunkData[1];       // [chunkSize], actually
    // no more fields
};

// KickedOff
extern const NetMsg kNetMsg_Auth2Cli_KickedOff;
struct Auth2Cli_KickedOff {
    dword           messageId;
    ENetError       reason;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeRefsFetched;
struct Auth2Cli_VaultNodeRefsFetched {
    dword                   messageId;
    dword                   transId;
    ENetError               result;
    dword                   refCount;
    NetVaultNodeRef         refs[1];
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeCreated;
struct Auth2Cli_VaultNodeCreated {
    dword                   messageId;
    dword                   transId;
    ENetError               result;
    dword                   nodeId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeFetched;
struct Auth2Cli_VaultNodeFetched {
    dword                   messageId;
    dword                   transId;
    ENetError               result;
    dword                   nodeBytes;
    byte                    nodeBuffer[1];
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeChanged;
struct Auth2Cli_VaultNodeChanged {
    dword                   messageId;
    dword                   nodeId;
    Uuid                    revisionId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeAdded;
struct Auth2Cli_VaultNodeAdded {
    dword                   messageId;
    dword                   parentId;
    dword                   childId;
    dword                   ownerId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeRemoved;
struct Auth2Cli_VaultNodeRemoved {
    dword                   messageId;
    dword                   parentId;
    dword                   childId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeDeleted;
struct Auth2Cli_VaultNodeDeleted {
    dword                   messageId;
    dword                   nodeId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultSaveNodeReply;
struct Auth2Cli_VaultSaveNodeReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultAddNodeReply;
struct Auth2Cli_VaultAddNodeReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultRemoveNodeReply;
struct Auth2Cli_VaultRemoveNodeReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultInitAgeReply;
struct Auth2Cli_VaultInitAgeReply {
    dword                   messageId;
    dword                   transId;
    ENetError               result;
    dword                   ageVaultId;
    dword                   ageInfoVaultId;
};

extern const NetMsg kNetMsg_Auth2Cli_VaultNodeFindReply;
struct Auth2Cli_VaultNodeFindReply {
    dword                   messageId;
    dword                   transId;
    ENetError               result;
    dword                   nodeIdCount;
    dword                   nodeIds[1];
};

// PublicAgeList
extern const NetMsg kNetMsg_Auth2Cli_PublicAgeList;
struct Auth2Cli_PublicAgeList {
    dword               messageId;
    dword               transId;
    ENetError           result;
    dword               ageCount;
    NetAgeInfo          ages[1];    // [ageCount], actually
};

// PropagateBuffer
extern const NetMsg kNetMsg_Auth2Cli_PropagateBuffer;
struct Auth2Cli_PropagateBuffer {
    dword       messageId;
    dword       type;
    dword       bytes;
    byte        buffer[1];  // [bytes], actually
    // no more fields
};

// SetPlayerBanStatusReply
extern const NetMsg kNetMsg_Auth2Cli_SetPlayerBanStatusReply;
struct Auth2Cli_SetPlayerBanStatusReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ChangePlayerNameReply
extern const NetMsg kNetMsg_Auth2Cli_ChangePlayerNameReply;
struct Auth2Cli_ChangePlayerNameReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// SendFriendInviteReply
extern const NetMsg kNetMsg_Auth2Cli_SendFriendInviteReply;
struct Auth2Cli_SendFriendInviteReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ScoreCreateReply
extern const NetMsg kNetMsg_Auth2Cli_ScoreCreateReply;
struct Auth2Cli_ScoreCreateReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           scoreId;
    dword           createdTime;
};

// ScoreDeleteReply
extern const NetMsg kNetMsg_Auth2Cli_ScoreDeleteReply;
struct Auth2Cli_ScoreDeleteReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ScoreGetScoresReply
extern const NetMsg kNetMsg_Auth2Cli_ScoreGetScoresReply;
struct Auth2Cli_ScoreGetScoresReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           scoreCount;
    dword           byteCount;
    byte            buffer[1];  // [byteCount], actually
    // no more fields
};

// ScoreAddPoints
extern const NetMsg kNetMsg_Auth2Cli_ScoreAddPointsReply;
struct Auth2Cli_ScoreAddPointsReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ScoreTransferPoints
extern const NetMsg kNetMsg_Auth2Cli_ScoreTransferPointsReply;
struct Auth2Cli_ScoreTransferPointsReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ScoreSetPoints
extern const NetMsg kNetMsg_Auth2Cli_ScoreSetPointsReply;
struct Auth2Cli_ScoreSetPointsReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
};

// ScoreGetRanksReply
extern const NetMsg kNetMsg_Auth2Cli_ScoreGetRanksReply;
struct Auth2Cli_ScoreGetRanksReply {
    dword           messageId;
    dword           transId;
    ENetError       result;
    dword           rankCount;
    dword           byteCount;
    byte            buffer[1];  // [byteCount], actually
    // no more fields
};

//============================================================================
// END PACKED DATA STRUCTURES
//============================================================================
#include <PopPack.h>