Commit 122b4187 authored by mercury233's avatar mercury233 Committed by GitHub

fix ScriptReader (#2654)

parent 8682f411
...@@ -389,30 +389,32 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) { ...@@ -389,30 +389,32 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
pData->clear(); pData->clear();
return 0; return 0;
} }
unsigned char* DataManager::ScriptReaderEx(const char* script_name, int* slen) { unsigned char* DataManager::ScriptReaderEx(const char* script_path, int* slen) {
// default script name: ./script/c%d.lua // default script name: ./script/c%d.lua
if (std::strncmp(script_name, "./script", 8) != 0) if (std::strncmp(script_path, "./script", 8) != 0) // not a card script file
return DefaultScriptReader(script_name, slen); return ReadScriptFromFile(script_path, slen);
const char* script_name = script_path + 2;
char expansions_path[1024]{}; char expansions_path[1024]{};
std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name + 2); std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name);
if(mainGame->gameConf.prefer_expansion_script) { if (mainGame->gameConf.prefer_expansion_script) { // debug script with raw file in expansions
if (DefaultScriptReader(expansions_path, slen)) if (ReadScriptFromFile(expansions_path, slen))
return scriptBuffer; return scriptBuffer;
else if (ScriptReader(script_name + 2, slen)) if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer; return scriptBuffer;
else if (DefaultScriptReader(script_name, slen)) if (ReadScriptFromFile(script_path, slen))
return scriptBuffer; return scriptBuffer;
} else { } else {
if (DefaultScriptReader(script_name, slen)) if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer; return scriptBuffer;
else if (DefaultScriptReader(expansions_path, slen)) if (ReadScriptFromFile(script_path, slen))
return scriptBuffer; return scriptBuffer;
else if (ScriptReader(script_name + 2, slen)) if (ReadScriptFromFile(expansions_path, slen))
return scriptBuffer; return scriptBuffer;
} }
return nullptr; return nullptr;
} }
unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* slen) {
#ifdef _WIN32 #ifdef _WIN32
wchar_t fname[256]{}; wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname); BufferIO::DecodeUTF8(script_name, fname);
...@@ -429,7 +431,7 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { ...@@ -429,7 +431,7 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
*slen = size; *slen = size;
return scriptBuffer; return scriptBuffer;
} }
unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) { unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* slen) {
wchar_t fname[256]{}; wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname); BufferIO::DecodeUTF8(script_name, fname);
FILE* fp = myfopen(fname, "rb"); FILE* fp = myfopen(fname, "rb");
......
...@@ -82,12 +82,12 @@ public: ...@@ -82,12 +82,12 @@ public:
static unsigned char scriptBuffer[0x100000]; static unsigned char scriptBuffer[0x100000];
static const wchar_t* unknown_string; static const wchar_t* unknown_string;
static uint32_t CardReader(uint32_t, card_data*); static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen); static unsigned char* ScriptReaderEx(const char* script_path, int* slen);
//read by IFileSystem //read by IFileSystem
static unsigned char* ScriptReader(const char* script_name, int* slen); static unsigned char* ReadScriptFromIrrFS(const char* script_name, int* slen);
//read by fread //read by fread
static unsigned char* DefaultScriptReader(const char* script_name, int* slen); static unsigned char* ReadScriptFromFile(const char* script_name, int* slen);
static irr::io::IFileSystem* FileSystem; static irr::io::IFileSystem* FileSystem;
......
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