summaryrefslogtreecommitdiff
path: root/src/pso
diff options
context:
space:
mode:
Diffstat (limited to 'src/pso')
-rw-r--r--src/pso/TProtocol.cpp131
1 files changed, 125 insertions, 6 deletions
diff --git a/src/pso/TProtocol.cpp b/src/pso/TProtocol.cpp
index 58a7374..415f056 100644
--- a/src/pso/TProtocol.cpp
+++ b/src/pso/TProtocol.cpp
@@ -15,11 +15,120 @@ OBJECT_NAME(TProtocol);
packet *server_packet = nullptr;
TPlyMeetUserExtension meet_user_settings;
+u32 game_variations[16][2];
void copy_packet(struct packet *pkt) {
}
+void TProtocol::recv_message(packet &pkt) {
+ TMessageBox tmp = as(TMessageBox &, pkt);
+ tmp.bswap();
+ if (m_recv_handlers.handle_11_recv_message != nullptr) {
+ m_recv_handlers.handle_11_recv_message(tmp.mesg, tmp.header.flags);
+ }
+};
+
+void TProtocol::recv_upload(packet &pkt) {};
+
+void TProtocol::recv_download(packet &pkt) {
+ TSendDownloadHead tmp2;
+ TRecvDownload tmp = as(TRecvDownload &, pkt);
+ tmp.bswap();
+
+ tmp2.header.command = tmp.header.command;
+ tmp2.header.flags = tmp.header.flags;
+ tmp2.header.size = sizeof(tmp2);
+ strncpy(tmp2.filename, tmp.filename, sizeof(tmp2.filename));
+ tmp2.bswap();
+
+ if (m_recv_handlers.handle_13_recv_download != nullptr) {
+ m_recv_handlers.handle_13_recv_download(tmp);
+ }
+
+ send(reinterpret_cast<u8 *>(&tmp2), sizeof(tmp2));
+};
+
+void TProtocol::recv_download2(packet &pkt) {
+ TSendDownloadHead tmp2;
+ TRecvDownload tmp = as(TRecvDownload &, pkt);
+ tmp.bswap();
+
+ tmp2.header.command = tmp.header.command;
+ tmp2.header.flags = tmp.header.flags;
+ tmp2.header.size = sizeof(tmp2);
+ strncpy(tmp2.filename, tmp.filename, sizeof(tmp2.filename));
+ tmp2.bswap();
+
+ if (m_recv_handlers.handle_A7_recv_download2 != nullptr) {
+ m_recv_handlers.handle_A7_recv_download2(tmp);
+ }
+
+ send(reinterpret_cast<u8 *>(&tmp2), sizeof(tmp2));
+};
+
+void TProtocol::recv_download_head2(packet &pkt) {
+ TSendDownloadHead tmp2;
+ TRecvDownloadHead tmp = as(TRecvDownloadHead &, pkt);
+ tmp.bswap();
+
+ tmp2.header.command = tmp.header.command;
+ tmp2.header.flags = tmp.header.flags;
+ tmp2.header.size = sizeof(tmp2);
+ strncpy(tmp2.filename, tmp.filename, sizeof(tmp2.filename));
+ tmp2.bswap();
+
+ if (m_recv_handlers.handle_A6_recv_download_head2 != nullptr) {
+ m_recv_handlers.handle_A6_recv_download_head2(tmp);
+ }
+
+ send(reinterpret_cast<u8 *>(&tmp2), sizeof(tmp2));
+};
+
+void TProtocol::recv_download_head(packet &pkt) {
+ TSendDownloadHead tmp2;
+ TRecvDownloadHead tmp = as(TRecvDownloadHead &, pkt);
+ tmp.bswap();
+
+ tmp2.header.command = tmp.header.command;
+ tmp2.header.flags = tmp.header.flags;
+ tmp2.header.size = sizeof(tmp2);
+ strncpy(tmp2.filename, tmp.filename, sizeof(tmp2.filename));
+ tmp2.bswap();
+
+ if (m_recv_handlers.handle_44_recv_download_head != nullptr) {
+ m_recv_handlers.handle_44_recv_download_head(tmp);
+ }
+
+ send(reinterpret_cast<u8 *>(&tmp2), sizeof(tmp2));
+};
+
+void TProtocol::recv_banner_head(packet &pkt) {};
+void TProtocol::recv_banner(packet &pkt) {};
+
+void TProtocol::recv_start_lobby2(packet &pkt) {
+ TPlyJoinLobby tmp = as(TPlyJoinLobby &, pkt);
+ tmp.bswap();
+
+ m_joined_game = true;
+
+ if (m_recv_handlers.handle_67_recv_start_lobby2 != nullptr) {
+ m_recv_handlers.handle_67_recv_start_lobby2(tmp.entries, tmp.header.flags, tmp.client_id, tmp.leader_id, tmp.lobby_number, tmp.block_number, tmp.unknown1, tmp.event);
+ }
+};
+
+void TProtocol::recv_start_game3(packet &pkt) {
+ TPlyJoinGame tmp = as(TPlyJoinGame &, pkt);
+ tmp.bswap();
+
+ memcpy(game_variations, tmp.variations, sizeof(game_variations));
+ m_joined_game = true;
+
+ if (m_recv_handlers.handle_64_recv_start_game3 != nullptr) {
+ m_recv_handlers.handle_64_recv_start_game3(tmp);
+ }
+};
+
void TProtocol::recv_start_game(packet &pkt) {
int lobby_entry_idx;
TPlyStartGame tmp = as(TPlyStartGame &, pkt);
@@ -163,10 +272,20 @@ int TProtocol::handle_command(struct packet *pkt) {
{ 0x07, &recv_dir_list },
{ 0x08, &recv_game_list },
{ 0x0E, &recv_start_game },
+ { 0x64, &recv_start_game3 },
+ { 0x12, &recv_banner },
+ { 0x16, &recv_banner_head },
+ { 0x44, &recv_download_head },
+ { 0x13, &recv_download },
+ { 0x14, &recv_upload },
+ { 0x11, &recv_message },
{ 0x1F, &recv_info_list },
{ 0x1A, &recv_text },
+ { 0x67, &recv_start_lobby2 },
{ 0xA0, &recv_dir_list },
{ 0xA1, &recv_dir_list },
+ { 0xA6, &recv_download_head2 },
+ { 0xA7, &recv_download2 },
{ 0xD5, &recv_text },
{ 0, nullptr }
};
@@ -307,13 +426,13 @@ TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *seria
m_recv_handlers.handle_07_A0_A1_recv_dir_list = nullptr;
m_recv_handlers.handle_01_recv_error = nullptr;
m_recv_handlers.handle_06_recv_chat = nullptr;
- m_recv_handlers.handle_11_additional_info_reply_packet = nullptr;
+ m_recv_handlers.handle_11_recv_message = nullptr;
m_recv_handlers.handle_0E_recv_start_game = nullptr;
m_recv_handlers.unused7 = nullptr;
- m_recv_handlers.handle_64_join_game_packet = nullptr;
+ m_recv_handlers.handle_64_recv_start_game3 = nullptr;
m_recv_handlers.unused8 = nullptr;
- m_recv_handlers.handle_67_join_lobby_packet = nullptr;
- m_recv_handlers.handle_13_quest_data_packet = nullptr;
+ m_recv_handlers.handle_67_recv_start_lobby2 = nullptr;
+ m_recv_handlers.handle_13_recv_download = nullptr;
m_recv_handlers.handle_80_unused_ignored_packet = nullptr;
m_recv_handlers.unused9 = nullptr;
m_recv_handlers.handle_65_add_player_to_game_packet = nullptr;
@@ -326,8 +445,8 @@ TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *seria
m_recv_handlers.handle_41_guild_card_search_reply_packet = nullptr;
m_recv_handlers.handle_A2_quest_list_packet = nullptr;
m_recv_handlers.handle_A3_quest_info_packet = nullptr;
- m_recv_handlers.handle_44_quest_file_list_packet = nullptr;
- m_recv_handlers.handle_13_quest_data_packet = nullptr;
+ m_recv_handlers.handle_44_recv_download_head = nullptr;
+ m_recv_handlers.handle_13_recv_download = nullptr;
m_recv_handlers.handle_A4_downloadable_quest_menu_packet = nullptr;
m_recv_handlers.handle_A5_downloadable_quest_info_packet = nullptr;
m_recv_handlers.unused11 = nullptr;