Don't show message boxes in headless mode
This commit is contained in:
parent
636dce392f
commit
8eab31946d
@ -569,8 +569,7 @@ namespace arxan
|
||||
|
||||
if (!context)
|
||||
{
|
||||
MessageBoxA(nullptr, utils::string::va("No frame offset for: %llX", handler_address), "Error",
|
||||
MB_ICONERROR);
|
||||
game::show_error(utils::string::va("No frame offset for: %llX", handler_address));
|
||||
TerminateProcess(GetCurrentProcess(), 0xBAD);
|
||||
return current_checksum;
|
||||
}
|
||||
@ -807,7 +806,7 @@ namespace arxan
|
||||
|
||||
NTSTATUS zw_terminate_process_stub(const HANDLE process_handle, const NTSTATUS exit_status)
|
||||
{
|
||||
MessageBoxA(nullptr, "TERMINATING", nullptr, 0);
|
||||
game::show_error("TERMINATING");
|
||||
return zw_terminate_process_hook.invoke<NTSTATUS>(process_handle, exit_status);
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
#include "resource.hpp"
|
||||
|
||||
#include "game/game.hpp"
|
||||
#include "scheduler.hpp"
|
||||
|
||||
#include <utils/thread.hpp>
|
||||
#include <utils/hook.hpp>
|
||||
@ -53,15 +52,9 @@ namespace console
|
||||
});
|
||||
}
|
||||
|
||||
bool is_headless()
|
||||
{
|
||||
static const auto headless = utils::flags::has_flag("headless");
|
||||
return headless;
|
||||
}
|
||||
|
||||
void print_message_to_console(const char* message)
|
||||
{
|
||||
if (is_headless())
|
||||
if (game::is_headless())
|
||||
{
|
||||
fputs(message, stdout);
|
||||
return;
|
||||
@ -133,7 +126,7 @@ namespace console
|
||||
|
||||
void sys_create_console_stub(const HINSTANCE h_instance)
|
||||
{
|
||||
if (is_headless())
|
||||
if (game::is_headless())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -238,7 +231,7 @@ namespace console
|
||||
|
||||
void set_title(const std::string& title)
|
||||
{
|
||||
if (is_headless())
|
||||
if (game::is_headless())
|
||||
{
|
||||
SetConsoleTitleA(title.data());
|
||||
}
|
||||
@ -252,7 +245,7 @@ namespace console
|
||||
{
|
||||
component()
|
||||
{
|
||||
if (is_headless())
|
||||
if (game::is_headless())
|
||||
{
|
||||
if (!AttachConsole(ATTACH_PARENT_PROCESS))
|
||||
{
|
||||
|
@ -76,7 +76,7 @@ namespace exception
|
||||
utils::thread::suspend_other_threads();
|
||||
show_mouse_cursor();
|
||||
|
||||
MessageBoxA(nullptr, error_str.data(), "BOIII ERROR", MB_ICONERROR);
|
||||
game::show_error(error_str.data(), "BOIII ERROR");
|
||||
TerminateProcess(GetCurrentProcess(), exception_data.code);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "game.hpp"
|
||||
|
||||
#include <utils/flags.hpp>
|
||||
#include <utils/finally.hpp>
|
||||
|
||||
namespace game
|
||||
@ -49,6 +50,24 @@ namespace game
|
||||
return server;
|
||||
}
|
||||
|
||||
bool is_headless()
|
||||
{
|
||||
static const auto headless = utils::flags::has_flag("headless");
|
||||
return headless;
|
||||
}
|
||||
|
||||
void show_error(const std::string& text, const std::string& title)
|
||||
{
|
||||
if(is_headless())
|
||||
{
|
||||
puts(text.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBoxA(nullptr, text.data(), title.data(), MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
}
|
||||
}
|
||||
|
||||
std::filesystem::path get_appdata_path()
|
||||
{
|
||||
static const auto appdata_path = []
|
||||
|
@ -16,6 +16,10 @@ namespace game
|
||||
bool is_client();
|
||||
bool is_legacy_client();
|
||||
|
||||
bool is_headless();
|
||||
|
||||
void show_error(const std::string& text, const std::string& title = "Error");
|
||||
|
||||
inline size_t relocate(const size_t val)
|
||||
{
|
||||
if (!val) return 0;
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include <utils/nt.hpp>
|
||||
|
||||
#include "game/game.hpp"
|
||||
|
||||
namespace component_loader
|
||||
{
|
||||
namespace
|
||||
@ -72,7 +74,7 @@ namespace component_loader
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
MessageBoxA(nullptr, e.what(), "Error", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
game::show_error(e.what());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -99,7 +101,7 @@ namespace component_loader
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
MessageBoxA(nullptr, e.what(), "Error", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
game::show_error(e.what());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -122,7 +124,7 @@ namespace component_loader
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
MessageBoxA(nullptr, e.what(), "Error", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
game::show_error(e.what());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -148,7 +150,7 @@ namespace component_loader
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
MessageBoxA(nullptr, e.what(), "Error", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
game::show_error(e.what());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -47,8 +47,7 @@ namespace
|
||||
const std::string steam_path = steam::SteamAPI_GetSteamInstallPath();
|
||||
if (steam_path.empty() || !::utils::io::file_exists(steam_path + "/steam.exe"))
|
||||
{
|
||||
MessageBoxA(nullptr, "Steam must be installed for the game to run. Please install Steam!", "Error",
|
||||
MB_ICONERROR);
|
||||
game::show_error("Steam must be installed for the game to run. Please install Steam!");
|
||||
ShellExecuteA(nullptr, "open", "https://store.steampowered.com/about/", nullptr, nullptr, SW_SHOWNORMAL);
|
||||
TerminateProcess(GetCurrentProcess(), 1);
|
||||
}
|
||||
@ -348,7 +347,7 @@ int main()
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
MessageBoxA(nullptr, e.what(), "Error", MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
|
||||
game::show_error(e.what());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -206,8 +206,6 @@ namespace steam
|
||||
return &c;
|
||||
}
|
||||
|
||||
|
||||
MessageBoxA(0, interfacename, __FUNCTION__, 0);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ namespace updater
|
||||
this->downloaded_files_.clear();
|
||||
this->downloading_files_.clear();
|
||||
|
||||
this->progress_ui_ = {true};
|
||||
this->progress_ui_ = {game::is_headless()};
|
||||
this->progress_ui_.set_title("BOIII Updater");
|
||||
this->progress_ui_.show(false);
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include <utils/concurrency.hpp>
|
||||
#include <utils/progress_ui.hpp>
|
||||
#include <game/game.hpp>
|
||||
|
||||
namespace updater
|
||||
{
|
||||
@ -19,7 +20,7 @@ namespace updater
|
||||
std::vector<file_info> downloaded_files_{};
|
||||
std::unordered_map<std::string, std::pair<size_t, size_t>> downloading_files_{};
|
||||
|
||||
utils::progress_ui progress_ui_{true};
|
||||
utils::progress_ui progress_ui_{game::is_headless()};
|
||||
|
||||
void update_files(const std::vector<file_info>& files) override;
|
||||
void done_update() override;
|
||||
|
@ -4,27 +4,17 @@
|
||||
|
||||
namespace utils
|
||||
{
|
||||
progress_ui::progress_ui(const bool allow_failure)
|
||||
progress_ui::progress_ui(const bool headless)
|
||||
{
|
||||
try
|
||||
if (headless)
|
||||
{
|
||||
if(utils::nt::is_wine())
|
||||
{
|
||||
throw std::runtime_error{ "Disabled on wine" };
|
||||
}
|
||||
|
||||
this->dialog_ = utils::com::create_progress_dialog();
|
||||
if (!this->dialog_)
|
||||
{
|
||||
throw std::runtime_error{"Failed to create dialog"};
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch (...)
|
||||
|
||||
this->dialog_ = com::create_progress_dialog();
|
||||
if (!this->dialog_)
|
||||
{
|
||||
if (!allow_failure)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
throw std::runtime_error{"Failed to create dialog"};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ namespace utils
|
||||
class progress_ui
|
||||
{
|
||||
public:
|
||||
progress_ui(bool allow_failure);
|
||||
progress_ui(bool headless);
|
||||
~progress_ui();
|
||||
|
||||
void show(bool marquee, HWND parent = nullptr) const;
|
||||
|
Loading…
Reference in New Issue
Block a user