Commit fe53acb7 authored by Chen Bill's avatar Chen Bill Committed by GitHub

DataManager: add DefaultScriptReader (#2624)

* DataManager: add DefaultScriptReader

* update priority
parent 56247c6d
......@@ -393,19 +393,26 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
}
unsigned char* DataManager::ScriptReaderEx(const char* script_name, int* slen) {
// default script name: ./script/c%d.lua
char first[256]{};
char second[256]{};
if (std::strncmp(script_name, "./script", 8) != 0)
return DefaultScriptReader(script_name, slen);
char expansions_path[1024]{};
std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name + 2);
if(mainGame->gameConf.prefer_expansion_script) {
snprintf(first, sizeof first, "expansions/%s", script_name + 2);
snprintf(second, sizeof second, "%s", script_name + 2);
if (ScriptReader(script_name, slen))
return scriptBuffer;
else if (DefaultScriptReader(expansions_path, slen))
return scriptBuffer;
else if (DefaultScriptReader(script_name, slen))
return scriptBuffer;
} else {
snprintf(first, sizeof first, "%s", script_name + 2);
snprintf(second, sizeof second, "expansions/%s", script_name + 2);
if (DefaultScriptReader(script_name, slen))
return scriptBuffer;
else if (ScriptReader(script_name, slen))
return scriptBuffer;
else if (DefaultScriptReader(expansions_path, slen))
return scriptBuffer;
}
if(ScriptReader(first, slen))
return scriptBuffer;
else
return ScriptReader(second, slen);
return nullptr;
}
unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
#ifdef _WIN32
......@@ -427,5 +434,18 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
*slen = (int)size;
return scriptBuffer;
}
unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) {
wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname);
FILE* fp = myfopen(fname, "rb");
if (!fp)
return nullptr;
size_t len = std::fread(scriptBuffer, 1, sizeof scriptBuffer, fp);
std::fclose(fp);
if (len >= sizeof scriptBuffer)
return nullptr;
*slen = (int)len;
return scriptBuffer;
}
}
......@@ -54,7 +54,12 @@ public:
static const wchar_t* unknown_string;
static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen);
//read by IFileSystem
static unsigned char* ScriptReader(const char* script_name, int* slen);
//read by fread
static unsigned char* DefaultScriptReader(const char* script_name, int* slen);
static IFileSystem* FileSystem;
private:
......
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