mirror of
https://github.com/BeamMP/BeamMP-Launcher.git
synced 2025-08-17 00:35:55 +00:00
Unicode path support
This commit is contained in:
parent
ab2a58bf42
commit
9a04665c34
@ -7,7 +7,7 @@
|
|||||||
///
|
///
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <string>
|
#include <string>
|
||||||
void PreGame(int argc, char* argv[],const std::string& GamePath);
|
void PreGame(const std::string& GamePath);
|
||||||
std::string CheckVer(const std::string &path);
|
std::string CheckVer(const std::string &path);
|
||||||
void InitGame(const std::string& Dir);
|
void InitGame(const std::string& Dir);
|
||||||
std::string GetGameDir();
|
std::string GetGameDir();
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
void InitLauncher(int argc, char* argv[]);
|
void InitLauncher(int argc, char* argv[]);
|
||||||
void CheckDir(int argc,char* args[]);
|
void CheckDir(int argc,char* args[]);
|
||||||
std::string GetGamePath();
|
std::wstring GetGamePath();
|
||||||
std::string GetVer();
|
std::string GetVer();
|
||||||
std::string GetEN();
|
std::string GetEN();
|
||||||
extern bool Dev;
|
extern bool Dev;
|
@ -11,12 +11,14 @@
|
|||||||
#include <ShlObj.h>
|
#include <ShlObj.h>
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <codecvt>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
unsigned long GamePID = 0;
|
unsigned long GamePID = 0;
|
||||||
std::string QueryKey(HKEY hKey,int ID);
|
std::string QueryKey(HKEY hKey,int ID);
|
||||||
std::string GetGamePath(){
|
std::wstring GetGamePath(){
|
||||||
static std::string Path;
|
static std::wstring Path;
|
||||||
if(!Path.empty())return Path;
|
if(!Path.empty())return Path;
|
||||||
|
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
@ -25,7 +27,8 @@ std::string GetGamePath(){
|
|||||||
if (openRes != ERROR_SUCCESS){
|
if (openRes != ERROR_SUCCESS){
|
||||||
fatal("Please launch the game at least once");
|
fatal("Please launch the game at least once");
|
||||||
}
|
}
|
||||||
Path = QueryKey(hKey,4);
|
std::string T = QueryKey(hKey,4);
|
||||||
|
Path = std::wstring(T.begin(),T.end());
|
||||||
|
|
||||||
if(Path.empty()){
|
if(Path.empty()){
|
||||||
CoInitialize(nullptr);
|
CoInitialize(nullptr);
|
||||||
@ -33,9 +36,8 @@ std::string GetGamePath(){
|
|||||||
SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_SIMPLE_IDLIST, nullptr, (PWSTR *)(&path));
|
SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_SIMPLE_IDLIST, nullptr, (PWSTR *)(&path));
|
||||||
CoTaskMemFree(path);
|
CoTaskMemFree(path);
|
||||||
std::wstring ws(path);
|
std::wstring ws(path);
|
||||||
std::string s(ws.begin(), ws.end());
|
ws += L"\\BeamNG.drive\\";
|
||||||
Path = s;
|
return ws;
|
||||||
Path += "\\BeamNG.drive\\";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Path;
|
return Path;
|
||||||
|
@ -258,10 +258,11 @@ void SyncResources(SOCKET Sock){
|
|||||||
UpdateUl(false,std::to_string(Pos) + "/" + std::to_string(Amount) + ": " + a.substr(a.find_last_of('/')));
|
UpdateUl(false,std::to_string(Pos) + "/" + std::to_string(Amount) + ": " + a.substr(a.find_last_of('/')));
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||||
try {
|
try {
|
||||||
if(!fs::exists(GetGamePath() + "mods/multiplayer")){
|
if(!fs::exists(GetGamePath() + L"mods/multiplayer")){
|
||||||
fs::create_directory(GetGamePath() + "mods/multiplayer");
|
fs::create_directory(GetGamePath() + L"mods/multiplayer");
|
||||||
}
|
}
|
||||||
fs::copy_file(a, GetGamePath() + "mods/multiplayer" + a.substr(a.find_last_of('/')),
|
std::string P = "mods/multiplayer" + a.substr(a.find_last_of('/'));
|
||||||
|
fs::copy_file(a, GetGamePath() + std::wstring(P.begin(),P.end()),
|
||||||
fs::copy_options::overwrite_existing);
|
fs::copy_options::overwrite_existing);
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
error("Failed copy to the mods folder! " + std::string(e.what()));
|
error("Failed copy to the mods folder! " + std::string(e.what()));
|
||||||
@ -299,10 +300,10 @@ void SyncResources(SOCKET Sock){
|
|||||||
|
|
||||||
}while(fs::file_size(a) != ModSize && !Terminate);
|
}while(fs::file_size(a) != ModSize && !Terminate);
|
||||||
if(!Terminate){
|
if(!Terminate){
|
||||||
if(!fs::exists(GetGamePath() + "mods/multiplayer")){
|
if(!fs::exists(GetGamePath() + L"mods/multiplayer")){
|
||||||
fs::create_directory(GetGamePath() + "mods/multiplayer");
|
fs::create_directory(GetGamePath() + L"mods/multiplayer");
|
||||||
}
|
}
|
||||||
fs::copy_file(a,GetGamePath() + "mods/multiplayer" + FName, fs::copy_options::overwrite_existing);
|
fs::copy_file(a,GetGamePath() + L"mods/multiplayer" + std::wstring(FName.begin(),FName.end()), fs::copy_options::overwrite_existing);
|
||||||
}
|
}
|
||||||
WaitForConfirm();
|
WaitForConfirm();
|
||||||
}
|
}
|
||||||
|
@ -187,8 +187,14 @@ void InitLauncher(int argc, char* argv[]) {
|
|||||||
CustomPort(argc, argv);
|
CustomPort(argc, argv);
|
||||||
CheckForUpdates(argc, argv, std::string(GetVer()) + GetPatch());
|
CheckForUpdates(argc, argv, std::string(GetVer()) + GetPatch());
|
||||||
}
|
}
|
||||||
|
inline std::string to_string(const std::wstring& str){
|
||||||
|
auto loc = std::locale{};
|
||||||
|
std::vector<char> buf(str.size());
|
||||||
|
std::use_facet<std::ctype<wchar_t>>(loc).narrow(str.data(), str.data() + str.size(), '?', buf.data());
|
||||||
|
|
||||||
void PreGame(int argc, char* argv[],const std::string& GamePath){
|
return std::string(buf.data(), buf.size());
|
||||||
|
}
|
||||||
|
void PreGame(const std::string& GamePath){
|
||||||
info("Game Version : " + CheckVer(GamePath));
|
info("Game Version : " + CheckVer(GamePath));
|
||||||
|
|
||||||
if(!Dev) {
|
if(!Dev) {
|
||||||
@ -196,16 +202,17 @@ void PreGame(int argc, char* argv[],const std::string& GamePath){
|
|||||||
//if(fallback)link = "https://backup1.beammp.com/builds/client";
|
//if(fallback)link = "https://backup1.beammp.com/builds/client";
|
||||||
std::string link = "https://beammp.com/builds/client";
|
std::string link = "https://beammp.com/builds/client";
|
||||||
try {
|
try {
|
||||||
if (!fs::exists(GetGamePath() + "mods")) {
|
if (!fs::exists(GetGamePath() + L"mods")) {
|
||||||
fs::create_directory(GetGamePath() + "mods");
|
fs::create_directory(GetGamePath() + L"mods");
|
||||||
}
|
}
|
||||||
if (!fs::exists(GetGamePath() + "mods/multiplayer")) {
|
if (!fs::exists(GetGamePath() + L"mods/multiplayer")) {
|
||||||
fs::create_directory(GetGamePath() + "mods/multiplayer");
|
fs::create_directory(GetGamePath() + L"mods/multiplayer");
|
||||||
}
|
}
|
||||||
|
std::wstring P = GetGamePath() + LR"(mods/multiplayer/BeamMP.zip)";
|
||||||
|
Download(link, to_string(P), true);
|
||||||
}catch(std::exception&e){
|
}catch(std::exception&e){
|
||||||
fatal(e.what());
|
fatal(e.what());
|
||||||
}
|
}
|
||||||
Download(link, GetGamePath() + R"(mods/multiplayer/BeamMP.zip)", true);
|
|
||||||
info("Download Complete!");
|
info("Download Complete!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ int main(int argc, char* argv[]) {
|
|||||||
InitLauncher(argc,argv);
|
InitLauncher(argc,argv);
|
||||||
//CheckDir(argc,argv);
|
//CheckDir(argc,argv);
|
||||||
LegitimacyCheck();
|
LegitimacyCheck();
|
||||||
PreGame(argc,argv,GetGameDir());
|
PreGame(GetGameDir());
|
||||||
InitGame(GetGameDir());
|
InitGame(GetGameDir());
|
||||||
CoreNetwork();
|
CoreNetwork();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user