Fix judge buttons not appearing & crash if MS goes down during play.

The former was caused by the position dropdown simply not having code to
make the judge buttons appear. Alongside that, the issue(?) where `/pos
judddd` (or variations) would not put the user in the judge position,
but gave them the buttons anyway.

The latter was caused by a simple mistake. We deleted the Lobby (and the
Courtroom) frequently, however, we never did set its (their) pointer(s)
back to null -- so they pointer to trash data, and the `if (w_lobby !=
nullptr)` part never failed.

This is also now fixed, and deletion of the Lobby or the Courtroom also
brings about the nulling of their pointers.
This commit is contained in:
Cerapter 2018-12-17 11:08:20 +01:00
parent 144a5bb64b
commit 73b6e72ab9
3 changed files with 38 additions and 18 deletions

View File

@ -57,6 +57,7 @@ void AOApplication::destruct_lobby()
} }
delete w_lobby; delete w_lobby;
w_lobby = nullptr;
lobby_constructed = false; lobby_constructed = false;
} }
@ -86,6 +87,7 @@ void AOApplication::destruct_courtroom()
} }
delete w_courtroom; delete w_courtroom;
w_courtroom = nullptr;
courtroom_constructed = false; courtroom_constructed = false;
} }
@ -157,7 +159,7 @@ void AOApplication::ms_connect_finished(bool connected, bool will_retry)
{ {
if (will_retry) if (will_retry)
{ {
if (w_lobby != nullptr) if (lobby_constructed)
w_lobby->append_error("Error connecting to master server. Will try again in " w_lobby->append_error("Error connecting to master server. Will try again in "
+ QString::number(net_manager->ms_reconnect_delay_ms / 1000.f) + " seconds."); + QString::number(net_manager->ms_reconnect_delay_ms / 1000.f) + " seconds.");
} }

View File

@ -2585,6 +2585,32 @@ void Courtroom::set_hp_bar(int p_bar, int p_state)
} }
} }
void Courtroom::toggle_judge_buttons(bool is_on)
{
if (is_on)
{
ui_witness_testimony->show();
ui_cross_examination->show();
ui_guilty->show();
ui_not_guilty->show();
ui_defense_minus->show();
ui_defense_plus->show();
ui_prosecution_minus->show();
ui_prosecution_plus->show();
}
else
{
ui_witness_testimony->hide();
ui_cross_examination->hide();
ui_guilty->hide();
ui_not_guilty->hide();
ui_defense_minus->hide();
ui_defense_plus->hide();
ui_prosecution_minus->hide();
ui_prosecution_plus->hide();
}
}
void Courtroom::mod_called(QString p_ip) void Courtroom::mod_called(QString p_ip)
{ {
ui_server_chatlog->append(p_ip); ui_server_chatlog->append(p_ip);
@ -2621,27 +2647,13 @@ void Courtroom::on_ooc_return_pressed()
if (ooc_message.startsWith("/pos")) if (ooc_message.startsWith("/pos"))
{ {
if (ooc_message.startsWith("/pos jud")) if (ooc_message == "/pos jud")
{ {
ui_witness_testimony->show(); toggle_judge_buttons(true);
ui_cross_examination->show();
ui_guilty->show();
ui_not_guilty->show();
ui_defense_minus->show();
ui_defense_plus->show();
ui_prosecution_minus->show();
ui_prosecution_plus->show();
} }
else else
{ {
ui_witness_testimony->hide(); toggle_judge_buttons(false);
ui_cross_examination->hide();
ui_guilty->hide();
ui_not_guilty->hide();
ui_defense_minus->hide();
ui_defense_plus->hide();
ui_prosecution_minus->hide();
ui_prosecution_plus->hide();
} }
} }
else if (ooc_message.startsWith("/login")) else if (ooc_message.startsWith("/login"))
@ -2891,6 +2903,8 @@ void Courtroom::on_pos_dropdown_changed(int p_index)
if (p_index < 0 || p_index > 5) if (p_index < 0 || p_index > 5)
return; return;
toggle_judge_buttons(false);
QString f_pos; QString f_pos;
switch (p_index) switch (p_index)
@ -2906,6 +2920,7 @@ void Courtroom::on_pos_dropdown_changed(int p_index)
break; break;
case 3: case 3:
f_pos = "jud"; f_pos = "jud";
toggle_judge_buttons(true);
break; break;
case 4: case 4:
f_pos = "hld"; f_pos = "hld";

View File

@ -204,6 +204,9 @@ public:
//state is an number between 0 and 10 inclusive //state is an number between 0 and 10 inclusive
void set_hp_bar(int p_bar, int p_state); void set_hp_bar(int p_bar, int p_state);
//Toggles the judge buttons, whether they should appear or not.
void toggle_judge_buttons(bool is_on);
void announce_case(QString title, bool def, bool pro, bool jud, bool jur, bool steno); void announce_case(QString title, bool def, bool pro, bool jud, bool jur, bool steno);
void check_connection_received(); void check_connection_received();