Commit 13722073 authored by nanahira's avatar nanahira

read YGOPRO_EXTRA_SCRIPT

parent 1ae7b399
Pipeline #40467 failed with stages
in 4 minutes and 31 seconds
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#endif #endif
unsigned int enable_log = 0x3; unsigned int enable_log = 0x3;
bool expansions_specified = false;
std::vector<std::wstring> expansions_list; std::vector<std::wstring> expansions_list;
std::vector<std::wstring> extra_script_list; std::vector<std::wstring> extra_script_list;
#ifndef YGOPRO_SERVER_MODE #ifndef YGOPRO_SERVER_MODE
...@@ -86,36 +85,59 @@ int main(int argc, char* argv[]) { ...@@ -86,36 +85,59 @@ int main(int argc, char* argv[]) {
ygo::Game _game; ygo::Game _game;
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
enable_log = 1; enable_log = 1;
bool expansions_specified = false;
wchar_t* expansions_env_val = nullptr; auto trim = [](std::wstring& s) {
const wchar_t* ws = L" \t\r\n";
auto b = s.find_first_not_of(ws);
auto e = s.find_last_not_of(ws);
if (b == std::wstring::npos) { s.clear(); return; }
s = s.substr(b, e - b + 1);
};
auto parse_wcsv = [&](const std::wstring& wcsv, std::vector<std::wstring>& out) {
if (wcsv.empty()) return;
std::wstringstream ss(wcsv);
std::wstring item;
while (std::getline(ss, item, L',')) {
trim(item);
if (!item.empty()) out.push_back(item);
}
};
auto get_env_wstr = [&](const char* env_name) -> std::wstring {
#ifdef _WIN32 #ifdef _WIN32
expansions_env_val = _wgetenv(L"YGOPRO_EXPANSIONS"); auto envname_w_len = std::strlen(env_name) + 1;
wchar_t* envname_w = new wchar_t[envname_w_len];
BufferIO::DecodeUTF8String(env_name, envname_w, envname_w_len);
const wchar_t* wval = _wgetenv(envname_w);
delete[] envname_w;
return (wval && wval[0]) ? std::wstring(wval) : std::wstring();
#else #else
const char* env_utf8 = std::getenv("YGOPRO_EXPANSIONS"); const char* env_utf8 = std::getenv(env_name);
if(env_utf8) { if (!env_utf8 || !env_utf8[0]) return {};
expansions_env_val = (wchar_t*)malloc(1024 * sizeof(wchar_t)); auto env_w_len = std::strlen(env_utf8) + 1;
BufferIO::DecodeUTF8String(env_utf8, expansions_env_val, 1024); wchar_t* env_w = new wchar_t[env_w_len];
} BufferIO::DecodeUTF8String(env_utf8, env_w, env_w_len);
auto res = std::wstring(env_w);
delete[] env_w;
return res;
#endif #endif
};
if (expansions_env_val && expansions_env_val[0] != L'\0') { auto load_env_list = [&](const char* env_name, std::vector<std::wstring>& out) {
expansions_specified = true; std::wstring val = get_env_wstr(env_name);
std::wstringstream ss(expansions_env_val); parse_wcsv(val, out);
std::wstring item; };
while (std::getline(ss, item, L',')) {
if (!item.empty()) { load_env_list("YGOPRO_EXPANSIONS", expansions_list);
expansions_list.push_back(item); if (expansions_list.empty()) {
}
}
} else {
expansions_specified = false;
expansions_list.push_back(L"./expansions"); expansions_list.push_back(L"./expansions");
#if defined(SERVER_PRO3_SUPPORT) && !defined(_WIN32) && !defined(__APPLE__) #if defined(SERVER_PRO3_SUPPORT) && !defined(_WIN32) && !defined(__APPLE__)
expansions_list.push_back(L"./Expansions"); expansions_list.push_back(L"./Expansions");
#endif #endif
} }
load_env_list("YGOPRO_EXTRA_SCRIPT", extra_script_list);
ygo::server_port = 7911; ygo::server_port = 7911;
ygo::replay_mode = 0; ygo::replay_mode = 0;
ygo::duel_flags = 0; ygo::duel_flags = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment