Commit f1ce2613 authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro into server

parents 60dc4cd7 122b4187
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
namespace ygo { namespace ygo {
const wchar_t* DataManager::unknown_string = L"???"; const wchar_t* DataManager::unknown_string = L"???";
unsigned char DataManager::scriptBuffer[0x100000]; unsigned char DataManager::scriptBuffer[0x100000] = {};
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT) #if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
irr::io::IFileSystem* DataManager::FileSystem = nullptr; irr::io::IFileSystem* DataManager::FileSystem = nullptr;
#endif #endif
...@@ -417,42 +417,47 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) { ...@@ -417,42 +417,47 @@ 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) {
if (std::strncmp(script_name, "./script", 8) != 0) // default script name: ./script/c%d.lua
return DefaultScriptReader(script_name, slen); if (std::strncmp(script_path, "./script", 8) != 0) // not a card script file
unsigned char* buffer; return ReadScriptFromFile(script_path, slen);
#ifndef YGOPRO_SERVER_MODE const char* script_name = script_path + 2;
if(!mainGame->gameConf.prefer_expansion_script) { char expansions_path[1024]{};
buffer = ScriptReaderExSingle("", script_name, slen); std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name);
if(buffer) #ifdef YGOPRO_SERVER_MODE
return buffer; char special_path[1024]{};
} std::snprintf(special_path, sizeof special_path, "./specials/%s", script_path + 9);
#endif //YGOPRO_SERVER_MODE if (ReadScriptFromFile(special_path, slen))
buffer = ScriptReaderExSingle("specials/", script_name, slen, 9); return scriptBuffer;
if(buffer) if (ReadScriptFromFile(expansions_path, slen)) // always read expansions first
return buffer; return scriptBuffer;
buffer = ScriptReaderExSingle("expansions/", script_name, slen); #ifdef SERVER_ZIP_SUPPORT
if(buffer) if (ReadScriptFromIrrFS(script_name, slen))
return buffer; return scriptBuffer;
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
buffer = ScriptReaderExSingle("", script_name, slen, 2, TRUE);
if(buffer)
return buffer;
#endif #endif
return ScriptReaderExSingle("", script_name, slen); if (ReadScriptFromFile(script_path, slen))
} return scriptBuffer;
unsigned char* DataManager::ScriptReaderExSingle(const char* path, const char* script_name, int* slen, int pre_len, unsigned int use_irr) { #else //YGOPRO_SERVER_MODE
char sname[256]; if (mainGame->gameConf.prefer_expansion_script) { // debug script with raw file in expansions
snprintf(sname, sizeof sname, "%s%s", path, script_name + pre_len); //default script name: ./script/c%d.lua if (ReadScriptFromFile(expansions_path, slen))
if (use_irr) { return scriptBuffer;
return ScriptReader(sname, slen); if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer;
if (ReadScriptFromFile(script_path, slen))
return scriptBuffer;
} else {
if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer;
if (ReadScriptFromFile(script_path, slen))
return scriptBuffer;
if (ReadScriptFromFile(expansions_path, slen))
return scriptBuffer;
} }
return DefaultScriptReader(sname, slen); #endif //YGOPRO_SERVER_MODE
return nullptr;
} }
unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { #if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
#if defined(YGOPRO_SERVER_MODE) && !defined(SERVER_ZIP_SUPPORT) unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* slen) {
return DefaultScriptReader(script_name, slen);
#else
#ifdef _WIN32 #ifdef _WIN32
wchar_t fname[256]{}; wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname); BufferIO::DecodeUTF8(script_name, fname);
...@@ -468,9 +473,9 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { ...@@ -468,9 +473,9 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
return nullptr; return nullptr;
*slen = size; *slen = size;
return scriptBuffer; return scriptBuffer;
#endif //YGOPRO_SERVER_MODE
} }
unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) { #endif //YGOPRO_SERVER_MODE
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");
......
...@@ -88,13 +88,14 @@ public: ...@@ -88,13 +88,14 @@ 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);
static unsigned char* ScriptReaderExSingle(const char* path, const char* script_name, int* slen, int pre_len = 2, unsigned int use_irr = FALSE);
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
//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);
#endif
//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);
#if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT) #if !defined(YGOPRO_SERVER_MODE) || defined(SERVER_ZIP_SUPPORT)
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