#ifndef PACKET_CLASSES_H #define PACKET_CLASSES_H #include #include #include #include #include #include #include #include #include #include template struct TPlyText { packet_header header; char text[size]; }; TMenuListEntry(GameListEntry, u8 difficulty_tag; u8 num_players; char name[16]; u8 episode; u8 flags; ); TMenuListEntry(LobbyListEntry, u32 smth; ); TMenuListEntry(QuestListEntry, char name[32]; char short_description[112]; ); class TRecvPort { public: packet_header header; u32 ip_addr; short port; public: void bswap() { header.bswap(); bswap_32(&ip_addr); bswap_16(as(u16 *, &port)); }; }; class TPlyMeetUserExtension { public: TPlyGuildCardTag tags[8]; u32 mbr_0x40; char player_name[16]; char player_name2[16]; public: void bswap() { for (int i = 0; i < 8; ++i) { tags[i].bswap(); } bswap_32(&mbr_0x40); }; }; class TPlyJoinLobbyData { public: TPlyGuildCardTag tag; u32 ip_addr; u32 client_id; char name[16]; public: void bswap() { tag.bswap(); bswap_32(&ip_addr); bswap_32(&client_id); }; }; class TPlyJoinLobbyEntry { public: TPlyJoinLobbyData lobby_data; TPlyCharData char_data; public: void bswap() { lobby_data.tag.bswap(); bswap_32(&lobby_data.ip_addr); bswap_32(&lobby_data.client_id); char_data.bswap(); }; }; class TRecvDownload { public: packet_header header; char filename[16]; u8 data[1024]; u32 data_size; public: void bswap() { header.bswap(); bswap_32(&data_size); }; }; class TSendDownloadHead { public: packet_header header; char filename[16]; public: void bswap() { header.bswap(); }; }; class TRecvDownloadHead { public: packet_header header; char path[32]; u16 unused; u16 flags; char filename[16]; u32 file_size; public: void bswap() { header.bswap(); bswap_32(&file_size); }; }; class TPlyJoinLobby { public: packet_header header; u8 client_id; u8 leader_id; u8 disable_udp; u8 lobby_number; u8 block_number; u8 unknown1; u8 event; u8 unknown2; u8 unused[4]; TPlyJoinLobbyEntry entries[12]; public: void bswap() { header.bswap(); for (int i = 0; i < 12; ++i) { entries[i].bswap(); } }; }; class TPlyJoinGame { public: packet_header header; u32 variations[16][2]; TPlyJoinLobbyData lobby_data[4]; u8 client_id; u8 leader_id; u8 disable_udp; u8 difficulty; u8 battle_mode; u8 event; u8 section_id; u8 challenge_mode; u32 rare_seed; u8 episode; u8 unknown1; u8 solo_mode; u8 unknown2; public: void bswap() { header.bswap(); for (int i = 0; i < 16; ++i) { for (int j = 0; j < 2; ++j) { bswap_32(&variations[i][j]); } } bswap_32(&rare_seed); }; }; class TPlyStartGame { public: packet_header header; TPlyJoinLobbyData lobby_data[4]; TPlyMeetUserExtension extension; u8 mbr_0xe8[4]; public: void bswap() { header.bswap(); for (int i = 0; i < 4; ++i) { lobby_data[i].bswap(); } extension.bswap(); }; }; class TPlyGuildCardTagPacket { public: packet_header header; TPlyGuildCardTag tag; }; class TPlyRecvLogin : public TPlyGuildCardTagPacket { public: TPlyClientConfig client_config; public: void bswap() { header.bswap(); tag.bswap(); }; }; class TMessageBox { public: packet_header header; TPlyGuildCardTag tag; char mesg[512]; public: void bswap() { header.bswap(); tag.bswap(); }; }; #endif