diff --git a/rpcs3/Emu/NP/np_handler.cpp b/rpcs3/Emu/NP/np_handler.cpp index 85e9d96c89..4597d27b19 100644 --- a/rpcs3/Emu/NP/np_handler.cpp +++ b/rpcs3/Emu/NP/np_handler.cpp @@ -858,7 +858,7 @@ namespace np presence_self.pr_data = {}; presence_self.advertised = false; - if (g_cfg.net.psn_status == np_psn_status::psn_rpcn) + if (is_connected && is_psn_active && rpcn) { rpcn_log.notice("Setting RPCN state to disconnected!"); rpcn->reset_state(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 41ce47c04e..bce15c443e 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -303,6 +303,12 @@ static void fixup_settings(const psf::registry* _psf) g_cfg.video.resolution.set(new_resolution); } } + + if (g_cfg.net.net_active == np_internet_status::disabled && g_cfg.net.psn_status != np_psn_status::disabled) + { + sys_log.warning("Net status was set to disconnected so psn status was disabled"); + g_cfg.net.psn_status.set(np_psn_status::disabled); + } } extern void dump_executable(std::span data, const ppu_module* _module, std::string_view title_id) diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 1d275bb498..77790ac0a0 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1481,6 +1481,16 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std const auto [text, value] = get_data(ui->netStatusBox, index); ui->gb_edit_dns->setEnabled(static_cast(value) != np_internet_status::disabled); ui->enable_upnp->setEnabled(static_cast(value) != np_internet_status::disabled); + + if (static_cast(value) == np_internet_status::disabled) + { + ui->psnStatusBox->setCurrentIndex(find_item(ui->psnStatusBox, static_cast(g_cfg.net.psn_status.def))); + ui->psnStatusBox->setEnabled(false); + } + else + { + ui->psnStatusBox->setEnabled(true); + } }); m_emu_settings->EnhanceComboBox(ui->netStatusBox, emu_settings_type::InternetStatus); SubscribeTooltip(ui->gb_netStatusBox, tooltips.settings.net_status);