diff options
| author | stonedDiscord <stoned@derpymail.org> | 2020-03-06 16:43:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-06 16:43:03 +0100 |
| commit | b668bb227652f0b19f0d0b7251c2afa2f36473c5 (patch) | |
| tree | 9f23859a30574d9ce9220dd0f5fd2450b5ec7e2c /src/packet_distribution.cpp | |
| parent | c2fd3796a97ee8d87544ec26df7d6797acfebd80 (diff) | |
| parent | 8c93cce0be0a316723284349d1f618dbf770ba3f (diff) | |
Merge branch 'master' into music_list_update
Diffstat (limited to 'src/packet_distribution.cpp')
| -rw-r--r-- | src/packet_distribution.cpp | 148 |
1 files changed, 99 insertions, 49 deletions
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index cfd6d8c6..5538c15e 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -7,6 +7,35 @@ #include "hardware_functions.h" #include "debug_functions.h" +class AOPacketLoadMusicThreading : public QRunnable +{ +public: + AOApplication *myapp; + QString filename; + bool ismusic; + AOPacketLoadMusicThreading(AOApplication *my_app, QString file_name, bool is_music){ + myapp = my_app; + filename = file_name; + ismusic = is_music; + } + void run() + { + if(ismusic) + { + myapp->w_courtroom->append_music(filename); + } + else + { + myapp->w_courtroom->append_area(filename); + myapp->area_count++; + } + for (int area_n = 0; area_n < myapp->area_count; area_n++) + { + myapp->w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); + } + } +}; + void AOApplication::ms_packet_received(AOPacket *p_packet) { p_packet->net_decode(); @@ -156,6 +185,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) arup_enabled = false; casing_alerts_enabled = false; modcall_reason_enabled = false; + looping_sfx_support_enabled = false; //workaround for tsuserver4 if (f_contents.at(0) == "NOENCRYPT") @@ -216,6 +246,10 @@ void AOApplication::server_packet_received(AOPacket *p_packet) casing_alerts_enabled = true; if (f_packet.contains("modcall_reason",Qt::CaseInsensitive)) modcall_reason_enabled = true; + if (f_packet.contains("looping_sfx",Qt::CaseInsensitive)) + looping_sfx_support_enabled = true; + + w_lobby->enable_connect_button(); } else if (header == "PN") { @@ -316,7 +350,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) ++loaded_chars; - w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size)); + w_lobby->set_loading_text(tr("Loading chars:\n%1/%2").arg(QString::number(loaded_chars)).arg(QString::number(char_list_size))); w_courtroom->append_char(f_char); @@ -408,7 +442,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) { musics_time = true; areas--; - w_courtroom->fix_last_area(); + //w_courtroom->fix_last_area(); w_courtroom->append_music(f_music); } else @@ -477,53 +511,39 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } else if (header == "SM") { - if (!courtroom_constructed) - goto end; + if (!courtroom_constructed) + goto end; - bool musics_time = false; - int areas = 0; + bool musics_time = false; + area_count = 0; - for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element) - { - ++loaded_music; - - w_lobby->set_loading_text(tr("Loading music:\n%1/%2").arg(QString::number(loaded_music)).arg(QString::number(music_list_size))); - - if (musics_time) - { - w_courtroom->append_music(f_contents.at(n_element)); - } - else - { - if (f_contents.at(n_element).endsWith(".wav") || - f_contents.at(n_element).endsWith(".mp3") || - f_contents.at(n_element).endsWith(".mp4") || - f_contents.at(n_element).endsWith(".ogg") || - f_contents.at(n_element).endsWith(".opus")) + for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element) { - musics_time = true; - w_courtroom->fix_last_area(); - w_courtroom->append_music(f_contents.at(n_element)); - areas--; - } - else - { - w_courtroom->append_area(f_contents.at(n_element)); - areas++; + if (!musics_time && (f_contents.at(n_element).startsWith("==") || + f_contents.at(n_element).endsWith(".wav") || + f_contents.at(n_element).endsWith(".mp3") || + f_contents.at(n_element).endsWith(".mp4") || + f_contents.at(n_element).endsWith(".ogg") || + f_contents.at(n_element).endsWith(".opus"))) + { + musics_time = true; + continue; + } + AOPacketLoadMusicThreading *music_load = new AOPacketLoadMusicThreading(this, f_contents.at(n_element), musics_time); + QThreadPool::globalInstance()->start(music_load); + ++loaded_music; + int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; + int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); + w_lobby->set_loading_value(loading_value); + w_lobby->set_loading_text(tr("Loading music:\n%1/%2").arg(QString::number(loaded_music)).arg(QString::number(music_list_size))); + if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount()) + { + QThreadPool::globalInstance()->waitForDone(); //out of order music is bad + } } - } + QThreadPool::globalInstance()->waitForDone(); - for (int area_n = 0; area_n < areas; area_n++) - { - w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); - } - - int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; - int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); - w_lobby->set_loading_value(loading_value); - } - - send_server_packet(new AOPacket("RD#%")); + send_server_packet(new AOPacket("RD#%")); } else if (header == "FM") { @@ -582,6 +602,16 @@ void AOApplication::server_packet_received(AOPacket *p_packet) destruct_lobby(); } + else if (header == "REFMUSIC") + { + if (courtroom_constructed) + w_courtroom->reset_music_list(); + for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element) + { + w_courtroom->append_music(f_contents.at(n_element)); + } + w_courtroom->list_music(); + } else if (header == "BN") { if (f_contents.size() < 1) @@ -595,9 +625,24 @@ void AOApplication::server_packet_received(AOPacket *p_packet) { if (f_contents.size() < 3) goto end; - - if (courtroom_constructed) - w_courtroom->enter_courtroom(f_contents.at(2).toInt()); + if(f_contents.size() < 4){ + if (courtroom_constructed) + w_courtroom->enter_courtroom(f_contents.at(2).toInt()); + } + else + { + if (courtroom_constructed) + { + if(f_contents.at(3) == "True") + { + w_courtroom->set_character(f_contents.at(2).toInt()); + } + else + { + w_courtroom->enter_courtroom(f_contents.at(2).toInt()); + } + } + } } else if (header == "MS") { @@ -662,6 +707,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } } } + else if (header == "FAILEDLOGIN") + { + if (courtroom_constructed) + w_courtroom->handle_failed_login(); + } else if (header == "IL") { if (courtroom_constructed && f_contents.size() > 0) @@ -707,8 +757,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } else if (header == "CASEA") { - if (courtroom_constructed && f_contents.size() > 6) - w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1", f_contents.at(2) == "1", f_contents.at(3) == "1", f_contents.at(4) == "1", f_contents.at(5) == "1"); + if (courtroom_constructed && f_contents.size() > 7) + w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1", f_contents.at(2) == "1", f_contents.at(3) == "1", f_contents.at(4) == "1", f_contents.at(5) == "1", f_contents.at(6) == "1"); } end: |
