8 Commits

Author SHA1 Message Date
Tixx
a2789a8524 Bump version to v2.7.0 2025-10-20 22:39:36 +02:00
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
7 changed files with 22 additions and 15 deletions

View File

@@ -38,6 +38,7 @@ extern std::string MStatus;
extern std::string UlStatus;
extern std::string PublicKey;
extern std::string PrivateKey;
extern std::string magic;
int KillSocket(uint64_t Dead);
void UUl(const std::string& R);
void UDPSend(std::string Data);

View File

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

View File

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

View File

@@ -33,6 +33,7 @@ bool GConnected = false;
bool CServer = true;
SOCKET CSocket = -1;
SOCKET GSocket = -1;
std::string magic;
int KillSocket(uint64_t Dead) {
if (Dead == (SOCKET)-1) {
@@ -218,6 +219,8 @@ void ParserAsync(std::string_view Data) {
MStatus = Data;
UlStatus = "Uldone";
return;
case 'U':
magic = Data.substr(1);
default:
break;
}

View File

@@ -93,6 +93,8 @@ void UDPClientMain(const std::string& IP, int Port) {
ToServer->sin_port = htons(Port);
inet_pton(AF_INET, IP.c_str(), &ToServer->sin_addr);
UDPSock = socket(AF_INET, SOCK_DGRAM, 0);
if (!magic.empty())
UDPSend(magic);
GameSend("P" + std::to_string(ClientID));
TCPSend("H", TCPSock);
UDPSend("p");

View File

@@ -177,6 +177,10 @@ void LegitimacyCheck() {
std::string contents((std::istreambuf_iterator(beamngIni)), std::istreambuf_iterator<char>());
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);
if (ini.empty())
lowExit(3);

View File

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