aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCrystalwarrior <Varsash@Gmail.com>2022-03-13 18:29:42 +0300
committerGitHub <noreply@github.com>2022-03-13 18:29:42 +0300
commitfa6eef8eba7b085526b6f0f3f6349531ec0727f4 (patch)
treed703de75226920a0d5b59174b64e0816aaeeea85 /src
parent5657ac74ae64e32903e295858292c0100ef6b045 (diff)
Allow character select list to refresh even if client is already loaded in (#655)
* Allow "SC" packet to be used to refresh the character list even if the client is loaded in Fix tree list of characters not being cleared properly between "SC" packets Fix client theme breaking when joining a server with empty character select list * Do my review suggestions on CW's behalf Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/charselect.cpp2
-rw-r--r--src/courtroom.cpp2
-rw-r--r--src/packet_distribution.cpp36
3 files changed, 22 insertions, 18 deletions
diff --git a/src/charselect.cpp b/src/charselect.cpp
index ea0a4c46..dce675a5 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -243,6 +243,7 @@ void Courtroom::character_loading_finished()
delete item;
}
ui_char_button_list.clear();
+ ui_char_list->clear();
}
// First, we'll make all the character buttons in the very beginning.
@@ -305,7 +306,6 @@ void Courtroom::character_loading_finished()
}
}
ui_char_list->expandAll();
- filter_character_list();
}
void Courtroom::filter_character_list()
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index d8a48a61..69040ffb 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -1310,13 +1310,13 @@ void Courtroom::done_received()
if (char_list.size() > 0)
{
- set_char_select_page();
set_char_select();
}
else
{
update_character(m_cid);
enter_courtroom();
+ set_courtroom_size();
}
set_mute_list();
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 0ddadd8c..0fe25dc5 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -240,9 +240,9 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else if (header == "SC") {
- if (!courtroom_constructed || courtroom_loaded)
+ if (!courtroom_constructed)
goto end;
-
+ w_courtroom->clear_chars();
for (int n_element = 0; n_element < f_contents.size(); ++n_element) {
QStringList sub_elements = f_contents.at(n_element).split("&");
@@ -256,24 +256,28 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
// temporary. the CharsCheck packet sets this properly
f_char.taken = false;
- ++loaded_chars;
-
- 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);
- 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);
+ if (!courtroom_loaded) {
+ ++loaded_chars;
+ w_lobby->set_loading_text(tr("Loading chars:\n%1/%2")
+ .arg(QString::number(loaded_chars))
+ .arg(QString::number(char_list_size)));
+
+ 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("RM#%"));
+ if (!courtroom_loaded)
+ send_server_packet(new AOPacket("RM#%"));
+ else
+ w_courtroom->character_loading_finished();
append_to_demofile(f_packet_encoded);
}
else if (header == "SM") {