#ifndef TPROTOCOL_H #define TPROTOCOL_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include EXTERN_OBJECT_NAME(TProtocol); extern void copy_packet(struct packet *pkt); struct packet { union { struct { packet_header header; u8 data[0x7c00-sizeof(packet_header)]; } pkt; u8 bytes[0x7c00]; }; template T &as() { return reinterpret_cast(*this); }; template T *as_ptr() { return reinterpret_cast(this); }; }; struct GameListEntry { u8 difficulty_tag; u8 num_players; char name[16]; u8 episode; u8 flags; }; struct LobbyListEntry { u32 smth; }; struct QuestListEntry { char name[32]; char short_description[112]; }; typedef void (*recv_packet_handler)(packet &pkt); class TProtocol : public TTcpSocket { public: TPlySmth m_smth; TPlyGuildCardTag m_guildcard_tag; u16 m_sub_version; int m_login_response_state; int m_connected; int m_joined_game; int m_has_meet_user_settings; int m_handle_pings_only; int m_entry_count; int m_unused; int m_lobby_list_count; int m_unused2; int m_udp_disabled; int m_language; u8 m_unused3[80]; TPlyCharData m_character_data; u32 m_unused4; TMenuListEntry m_game_entries[64]; TMenuListEntry m_game_entries2[64]; TMenuListEntry m_lobby_entries[16]; TMenuListEntry m_quest_entries[30]; u8 m_unused5[128]; char m_serial_number3[17]; char m_password2[17]; char m_serial_number[48]; char m_access_key[48]; char m_password[64]; char m_player_name[16]; char m_serial_number2[17]; char m_access_key2[17]; TPlyClientConfig m_client_config; int m_packet_offset; int m_packet_size; struct packet m_packet; recv_packet_handler m_recv_handlers[52]; public: TProtocol(TObject *parent, u16 sub_version, int language, char *serial_number, char *access_key, char *password); virtual ~TProtocol(); virtual void run_task(); virtual short send(u8 *data, size_t size); void some_stub() {}; int handle_command(struct packet *pkt); void parse_packet(); }; #endif