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:
		
							parent
							
								
									144a5bb64b
								
							
						
					
					
						commit
						73b6e72ab9
					
				@ -57,6 +57,7 @@ void AOApplication::destruct_lobby()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  delete w_lobby;
 | 
			
		||||
  w_lobby = nullptr;
 | 
			
		||||
  lobby_constructed = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -86,6 +87,7 @@ void AOApplication::destruct_courtroom()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  delete w_courtroom;
 | 
			
		||||
  w_courtroom = nullptr;
 | 
			
		||||
  courtroom_constructed = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -157,7 +159,7 @@ void AOApplication::ms_connect_finished(bool connected, bool 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 "
 | 
			
		||||
                            + QString::number(net_manager->ms_reconnect_delay_ms / 1000.f) + " seconds.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
{
 | 
			
		||||
  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 jud"))
 | 
			
		||||
    if (ooc_message == "/pos jud")
 | 
			
		||||
    {
 | 
			
		||||
      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();
 | 
			
		||||
      toggle_judge_buttons(true);
 | 
			
		||||
    }
 | 
			
		||||
    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();
 | 
			
		||||
      toggle_judge_buttons(false);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  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)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  toggle_judge_buttons(false);
 | 
			
		||||
 | 
			
		||||
  QString f_pos;
 | 
			
		||||
 | 
			
		||||
  switch (p_index)
 | 
			
		||||
@ -2906,6 +2920,7 @@ void Courtroom::on_pos_dropdown_changed(int p_index)
 | 
			
		||||
    break;
 | 
			
		||||
  case 3:
 | 
			
		||||
    f_pos = "jud";
 | 
			
		||||
    toggle_judge_buttons(true);
 | 
			
		||||
    break;
 | 
			
		||||
  case 4:
 | 
			
		||||
    f_pos = "hld";
 | 
			
		||||
 | 
			
		||||
@ -204,6 +204,9 @@ public:
 | 
			
		||||
  //state is an number between 0 and 10 inclusive
 | 
			
		||||
  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 check_connection_received();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user