7 Commits
193 ... v2.6.4

Author SHA1 Message Date
Tixx
6f84b56f1b Bump version 2025-09-27 20:47:14 +02:00
Tixx
6f5197217c Workaround bom header (#211)
This PR removes the utf8 bom encoding header which was causing issues.
This PR also adds support for unicode characters in the terminal on
windows.

For context it looks like the BeamNG launcher only encodes it with the
utf8 header, which is what it's currently removing.

---

By creating this pull request, I understand that code that is AI
generated or otherwise automatically generated may be rejected without
further discussion.
I declare that I fully understand all code I pushed into this PR, and
wrote all this code myself and own the rights to this code.
2025-09-27 20:14:10 +02:00
Tixx
d1d2b3414b Adjust ini parser (#212)
This PR removes mid-line ini comments which were causing issue because
users had `#` and `;` in their file path.

---

By creating this pull request, I understand that code that is AI
generated or otherwise automatically generated may be rejected without
further discussion.
I declare that I fully understand all code I pushed into this PR, and
wrote all this code myself and own the rights to this code.
2025-09-27 20:08:13 +02:00
Tixx
a669557726 Make logger stdout cross platform again 2025-09-21 21:54:24 +02:00
Tixx
be1f5c04f7 Remove mid-line ini comments 2025-09-21 21:49:40 +02:00
Tixx
1209ff88e2 Support unicode in windows terminal 2025-09-21 21:39:57 +02:00
Tixx
c40af681bf Strip bom encoding 2025-09-21 21:39:38 +02:00
4 changed files with 15 additions and 14 deletions

View File

@@ -21,12 +21,14 @@
#define beammp_fs_string std::wstring #define beammp_fs_string std::wstring
#define beammp_fs_char wchar_t #define beammp_fs_char wchar_t
#define beammp_wide(str) L##str #define beammp_wide(str) L##str
#define beammp_stdout std::wcout
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#else #else
#define beammp_fs_string std::string #define beammp_fs_string std::string
#define beammp_fs_char char #define beammp_fs_char char
#define beammp_wide(str) str #define beammp_wide(str) str
#define beammp_stdout std::cout
#endif #endif
namespace Utils { namespace Utils {
@@ -120,13 +122,6 @@ namespace Utils {
if (line.empty() || line[0] == ';' || line[0] == '#') if (line.empty() || line[0] == ';' || line[0] == '#')
continue; continue;
for (auto& c : line) {
if (c == '#' || c == ';') {
line = line.substr(0, &c - &line[0]);
break;
}
}
auto invalidLineLog = [&]{ auto invalidLineLog = [&]{
debug("Invalid INI line: " + line); debug("Invalid INI line: " + line);
debug("Surrounding lines: \n" + debug("Surrounding lines: \n" +

View File

@@ -57,36 +57,36 @@ void addToLog(const std::wstring& Line) {
} }
void info(const std::string& toPrint) { void info(const std::string& toPrint) {
std::string Print = getDate() + "[INFO] " + toPrint + "\n"; std::string Print = getDate() + "[INFO] " + toPrint + "\n";
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
addToLog(Print); addToLog(Print);
} }
void debug(const std::string& toPrint) { void debug(const std::string& toPrint) {
std::string Print = getDate() + "[DEBUG] " + toPrint + "\n"; std::string Print = getDate() + "[DEBUG] " + toPrint + "\n";
if (options.verbose) { if (options.verbose) {
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
} }
addToLog(Print); addToLog(Print);
} }
void warn(const std::string& toPrint) { void warn(const std::string& toPrint) {
std::string Print = getDate() + "[WARN] " + toPrint + "\n"; std::string Print = getDate() + "[WARN] " + toPrint + "\n";
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
addToLog(Print); addToLog(Print);
} }
void error(const std::string& toPrint) { void error(const std::string& toPrint) {
std::string Print = getDate() + "[ERROR] " + toPrint + "\n"; std::string Print = getDate() + "[ERROR] " + toPrint + "\n";
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
addToLog(Print); addToLog(Print);
} }
void fatal(const std::string& toPrint) { void fatal(const std::string& toPrint) {
std::string Print = getDate() + "[FATAL] " + toPrint + "\n"; std::string Print = getDate() + "[FATAL] " + toPrint + "\n";
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
addToLog(Print); addToLog(Print);
std::this_thread::sleep_for(std::chrono::seconds(5)); std::this_thread::sleep_for(std::chrono::seconds(5));
std::exit(1); std::exit(1);
} }
void except(const std::string& toPrint) { void except(const std::string& toPrint) {
std::string Print = getDate() + "[EXCEP] " + toPrint + "\n"; std::string Print = getDate() + "[EXCEP] " + toPrint + "\n";
std::cout << Print; beammp_stdout << Utils::ToWString(Print);
addToLog(Print); addToLog(Print);
} }

View File

@@ -177,6 +177,10 @@ void LegitimacyCheck() {
std::string contents((std::istreambuf_iterator(beamngIni)), std::istreambuf_iterator<char>()); std::string contents((std::istreambuf_iterator(beamngIni)), std::istreambuf_iterator<char>());
beamngIni.close(); beamngIni.close();
if (contents.size() >= 3 && (unsigned char)contents[0] == 0xEF && (unsigned char)contents[1] == 0xBB && (unsigned char)contents[2] == 0xBF) {
contents = contents.substr(3);
}
auto ini = Utils::ParseINI(contents); auto ini = Utils::ParseINI(contents);
if (ini.empty()) if (ini.empty())
lowExit(3); lowExit(3);

View File

@@ -87,7 +87,7 @@ std::string GetVer() {
return "2.6"; return "2.6";
} }
std::string GetPatch() { std::string GetPatch() {
return ".3"; return ".4";
} }
beammp_fs_string GetEP(const beammp_fs_char* P) { beammp_fs_string GetEP(const beammp_fs_char* P) {
@@ -269,6 +269,8 @@ void LinuxPatch() {
void InitLauncher() { void InitLauncher() {
SetConsoleTitleA(("BeamMP Launcher v" + std::string(GetVer()) + GetPatch()).c_str()); SetConsoleTitleA(("BeamMP Launcher v" + std::string(GetVer()) + GetPatch()).c_str());
SetConsoleOutputCP(CP_UTF8);
_setmode(_fileno(stdout), _O_U8TEXT);
debug("Launcher Version : " + GetVer() + GetPatch()); debug("Launcher Version : " + GetVer() + GetPatch());
CheckName(); CheckName();
LinuxPatch(); LinuxPatch();