Commit c85207e4 authored by wind2009's avatar wind2009

Merge remote-tracking branch 'hub/server' into server-develop

parents 12bbd88b f1ce2613
No preview for this file type
...@@ -43,12 +43,6 @@ ...@@ -43,12 +43,6 @@
#define mystrncasecmp strncasecmp #define mystrncasecmp strncasecmp
#endif #endif
#include <wchar.h>
template<size_t N, typename... TR>
inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
return swprintf(buf, N, fmt, args...);
}
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <iostream> #include <iostream>
...@@ -58,6 +52,11 @@ inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) { ...@@ -58,6 +52,11 @@ inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
#include "../ocgcore/ocgapi.h" #include "../ocgcore/ocgapi.h"
#include "../ocgcore/common.h" #include "../ocgcore/common.h"
template<size_t N, typename... TR>
inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
return std::swprintf(buf, N, fmt, args...);
}
inline FILE* myfopen(const wchar_t* filename, const char* mode) { inline FILE* myfopen(const wchar_t* filename, const char* mode) {
FILE* fp{}; FILE* fp{};
#ifdef _WIN32 #ifdef _WIN32
......
...@@ -130,6 +130,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) { ...@@ -130,6 +130,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
#endif //YGOPRO_SERVER_MODE #endif //YGOPRO_SERVER_MODE
return ret; return ret;
} }
#ifndef YGOPRO_SERVER_MODE
bool DataManager::LoadStrings(const char* file) { bool DataManager::LoadStrings(const char* file) {
FILE* fp = fopen(file, "r"); FILE* fp = fopen(file, "r");
if(!fp) if(!fp)
...@@ -141,7 +142,6 @@ bool DataManager::LoadStrings(const char* file) { ...@@ -141,7 +142,6 @@ bool DataManager::LoadStrings(const char* file) {
fclose(fp); fclose(fp);
return true; return true;
} }
#ifndef YGOPRO_SERVER_MODE
bool DataManager::LoadStrings(irr::io::IReadFile* reader) { bool DataManager::LoadStrings(irr::io::IReadFile* reader) {
char ch{}; char ch{};
std::string linebuf; std::string linebuf;
...@@ -157,7 +157,6 @@ bool DataManager::LoadStrings(irr::io::IReadFile* reader) { ...@@ -157,7 +157,6 @@ bool DataManager::LoadStrings(irr::io::IReadFile* reader) {
reader->drop(); reader->drop();
return true; return true;
} }
#endif //YGOPRO_SERVER_MODE
void DataManager::ReadStringConfLine(const char* linebuf) { void DataManager::ReadStringConfLine(const char* linebuf) {
if(linebuf[0] != '!') if(linebuf[0] != '!')
return; return;
...@@ -189,6 +188,7 @@ void DataManager::ReadStringConfLine(const char* linebuf) { ...@@ -189,6 +188,7 @@ void DataManager::ReadStringConfLine(const char* linebuf) {
_setnameStrings[value] = strBuffer; _setnameStrings[value] = strBuffer;
} }
} }
#endif //YGOPRO_SERVER_MODE
bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt) { bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt) {
errmsg[0] = '\0'; errmsg[0] = '\0';
std::strncat(errmsg, sqlite3_errmsg(pDB), sizeof errmsg - 1); std::strncat(errmsg, sqlite3_errmsg(pDB), sizeof errmsg - 1);
...@@ -199,6 +199,7 @@ bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt) { ...@@ -199,6 +199,7 @@ bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt) {
code_pointer DataManager::GetCodePointer(unsigned int code) const { code_pointer DataManager::GetCodePointer(unsigned int code) const {
return _datas.find(code); return _datas.find(code);
} }
#ifndef YGOPRO_SERVER_MODE
string_pointer DataManager::GetStringPointer(unsigned int code) const { string_pointer DataManager::GetStringPointer(unsigned int code) const {
return _strings.find(code); return _strings.find(code);
} }
...@@ -214,6 +215,7 @@ string_pointer DataManager::strings_begin() const { ...@@ -214,6 +215,7 @@ string_pointer DataManager::strings_begin() const {
string_pointer DataManager::strings_end() const { string_pointer DataManager::strings_end() const {
return _strings.cend(); return _strings.cend();
} }
#endif //YGOPRO_SERVER_MODE
bool DataManager::GetData(unsigned int code, CardData* pData) const { bool DataManager::GetData(unsigned int code, CardData* pData) const {
auto cdit = _datas.find(code); auto cdit = _datas.find(code);
if(cdit == _datas.end()) if(cdit == _datas.end())
...@@ -223,6 +225,7 @@ bool DataManager::GetData(unsigned int code, CardData* pData) const { ...@@ -223,6 +225,7 @@ bool DataManager::GetData(unsigned int code, CardData* pData) const {
} }
return true; return true;
} }
#ifndef YGOPRO_SERVER_MODE
bool DataManager::GetString(unsigned int code, CardString* pStr) const { bool DataManager::GetString(unsigned int code, CardString* pStr) const {
auto csit = _strings.find(code); auto csit = _strings.find(code);
if(csit == _strings.end()) { if(csit == _strings.end()) {
...@@ -284,7 +287,7 @@ const wchar_t* DataManager::GetCounterName(int code) const { ...@@ -284,7 +287,7 @@ const wchar_t* DataManager::GetCounterName(int code) const {
const wchar_t* DataManager::GetSetName(int code) const { const wchar_t* DataManager::GetSetName(int code) const {
auto csit = _setnameStrings.find(code); auto csit = _setnameStrings.find(code);
if(csit == _setnameStrings.end()) if(csit == _setnameStrings.end())
return nullptr; return unknown_string;
return csit->second.c_str(); return csit->second.c_str();
} }
std::vector<unsigned int> DataManager::GetSetCodes(std::wstring setname) const { std::vector<unsigned int> DataManager::GetSetCodes(std::wstring setname) const {
...@@ -380,11 +383,9 @@ std::wstring DataManager::FormatSetName(const uint16_t setcode[]) const { ...@@ -380,11 +383,9 @@ std::wstring DataManager::FormatSetName(const uint16_t setcode[]) const {
if (!setcode[i]) if (!setcode[i])
break; break;
const wchar_t* setname = GetSetName(setcode[i]); const wchar_t* setname = GetSetName(setcode[i]);
if(setname) { if (!buffer.empty())
if (!buffer.empty()) buffer.push_back(L'|');
buffer.push_back(L'|'); buffer.append(setname);
buffer.append(setname);
}
} }
if (buffer.empty()) if (buffer.empty())
return std::wstring(unknown_string); return std::wstring(unknown_string);
...@@ -410,54 +411,53 @@ std::wstring DataManager::FormatLinkMarker(unsigned int link_marker) const { ...@@ -410,54 +411,53 @@ std::wstring DataManager::FormatLinkMarker(unsigned int link_marker) const {
buffer.append(L"[\u2198]"); buffer.append(L"[\u2198]");
return buffer; return buffer;
} }
#endif //YGOPRO_SERVER_MODE
uint32_t DataManager::CardReader(uint32_t code, card_data* pData) { uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
if (!dataManager.GetData(code, pData)) if (!dataManager.GetData(code, 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) {
FILE* fp = fopen(script_name, "rb");
if(!fp)
return 0;
int len = fread(scriptBuffer, 1, sizeof(scriptBuffer), fp);
fclose(fp);
if(len >= sizeof(scriptBuffer))
return 0;
*slen = len;
#else
#ifdef _WIN32 #ifdef _WIN32
wchar_t fname[256]{}; wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname); BufferIO::DecodeUTF8(script_name, fname);
...@@ -472,10 +472,10 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) { ...@@ -472,10 +472,10 @@ unsigned char* DataManager::ScriptReader(const char* script_name, int* slen) {
if (size >= (int)sizeof scriptBuffer) if (size >= (int)sizeof scriptBuffer)
return nullptr; return nullptr;
*slen = size; *slen = size;
#endif //YGOPRO_SERVER_MODE
return scriptBuffer; return scriptBuffer;
} }
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");
...@@ -488,6 +488,7 @@ unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* sl ...@@ -488,6 +488,7 @@ unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* sl
*slen = (int)len; *slen = (int)len;
return scriptBuffer; return scriptBuffer;
} }
#ifndef YGOPRO_SERVER_MODE
bool DataManager::deck_sort_lv(code_pointer p1, code_pointer p2) { bool DataManager::deck_sort_lv(code_pointer p1, code_pointer p2) {
if ((p1->second.type & 0x7) != (p2->second.type & 0x7)) if ((p1->second.type & 0x7) != (p2->second.type & 0x7))
return (p1->second.type & 0x7) < (p2->second.type & 0x7); return (p1->second.type & 0x7) < (p2->second.type & 0x7);
...@@ -551,10 +552,11 @@ bool DataManager::deck_sort_def(code_pointer p1, code_pointer p2) { ...@@ -551,10 +552,11 @@ bool DataManager::deck_sort_def(code_pointer p1, code_pointer p2) {
bool DataManager::deck_sort_name(code_pointer p1, code_pointer p2) { bool DataManager::deck_sort_name(code_pointer p1, code_pointer p2) {
const wchar_t* name1 = dataManager.GetName(p1->first); const wchar_t* name1 = dataManager.GetName(p1->first);
const wchar_t* name2 = dataManager.GetName(p2->first); const wchar_t* name2 = dataManager.GetName(p2->first);
int res = wcscmp(name1, name2); int res = std::wcscmp(name1, name2);
if (res != 0) if (res != 0)
return res < 0; return res < 0;
return p1->first < p2->first; return p1->first < p2->first;
} }
#endif //YGOPRO_SERVER_MODE
} }
...@@ -44,20 +44,23 @@ public: ...@@ -44,20 +44,23 @@ public:
DataManager(); DataManager();
bool ReadDB(sqlite3* pDB); bool ReadDB(sqlite3* pDB);
bool LoadDB(const wchar_t* wfile); bool LoadDB(const wchar_t* wfile);
bool LoadStrings(const char* file);
#ifndef YGOPRO_SERVER_MODE #ifndef YGOPRO_SERVER_MODE
bool LoadStrings(const char* file);
bool LoadStrings(irr::io::IReadFile* reader); bool LoadStrings(irr::io::IReadFile* reader);
#endif
void ReadStringConfLine(const char* linebuf); void ReadStringConfLine(const char* linebuf);
#endif
bool Error(sqlite3* pDB, sqlite3_stmt* pStmt = nullptr); bool Error(sqlite3* pDB, sqlite3_stmt* pStmt = nullptr);
code_pointer GetCodePointer(unsigned int code) const; code_pointer GetCodePointer(unsigned int code) const;
#ifndef YGOPRO_SERVER_MODE
string_pointer GetStringPointer(unsigned int code) const; string_pointer GetStringPointer(unsigned int code) const;
code_pointer datas_begin() const; code_pointer datas_begin() const;
code_pointer datas_end() const; code_pointer datas_end() const;
string_pointer strings_begin() const; string_pointer strings_begin() const;
string_pointer strings_end() const; string_pointer strings_end() const;
#endif
bool GetData(unsigned int code, CardData* pData) const; bool GetData(unsigned int code, CardData* pData) const;
#ifndef YGOPRO_SERVER_MODE
bool GetString(unsigned int code, CardString* pStr) const; bool GetString(unsigned int code, CardString* pStr) const;
const wchar_t* GetName(unsigned int code) const; const wchar_t* GetName(unsigned int code) const;
const wchar_t* GetText(unsigned int code) const; const wchar_t* GetText(unsigned int code) const;
...@@ -79,22 +82,32 @@ public: ...@@ -79,22 +82,32 @@ public:
std::unordered_map<unsigned int, std::wstring> _victoryStrings; std::unordered_map<unsigned int, std::wstring> _victoryStrings;
std::unordered_map<unsigned int, std::wstring> _setnameStrings; std::unordered_map<unsigned int, std::wstring> _setnameStrings;
std::unordered_map<unsigned int, std::wstring> _sysStrings; std::unordered_map<unsigned int, std::wstring> _sysStrings;
#endif
char errmsg[512]{}; char errmsg[512]{};
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;
#endif #endif
#ifndef YGOPRO_SERVER_MODE
static bool deck_sort_lv(code_pointer l1, code_pointer l2);
static bool deck_sort_atk(code_pointer l1, code_pointer l2);
static bool deck_sort_def(code_pointer l1, code_pointer l2);
static bool deck_sort_name(code_pointer l1, code_pointer l2);
#endif
static bool deck_sort_lv(code_pointer l1, code_pointer l2); static bool deck_sort_lv(code_pointer l1, code_pointer l2);
static bool deck_sort_atk(code_pointer l1, code_pointer l2); static bool deck_sort_atk(code_pointer l1, code_pointer l2);
static bool deck_sort_def(code_pointer l1, code_pointer l2); static bool deck_sort_def(code_pointer l1, code_pointer l2);
......
...@@ -178,7 +178,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -178,7 +178,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
int sel = -1; int sel = -1;
for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) { for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
if(!wcscmp(dname, mainGame->cbDBDecks->getItem(i))) { if(!std::wcscmp(dname, mainGame->cbDBDecks->getItem(i))) {
sel = i; sel = i;
break; break;
} }
...@@ -1524,7 +1524,7 @@ void DeckBuilder::FilterCards() { ...@@ -1524,7 +1524,7 @@ void DeckBuilder::FilterCards() {
SortList(); SortList();
} }
void DeckBuilder::InstantSearch() { void DeckBuilder::InstantSearch() {
if(mainGame->gameConf.auto_search_limit >= 0 && ((int)wcslen(mainGame->ebCardName->getText()) >= mainGame->gameConf.auto_search_limit)) if(mainGame->gameConf.auto_search_limit >= 0 && ((int)std::wcslen(mainGame->ebCardName->getText()) >= mainGame->gameConf.auto_search_limit))
StartFilter(); StartFilter();
} }
void DeckBuilder::ClearSearch() { void DeckBuilder::ClearSearch() {
...@@ -1565,7 +1565,7 @@ void DeckBuilder::SortList() { ...@@ -1565,7 +1565,7 @@ void DeckBuilder::SortList() {
auto left = results.begin(); auto left = results.begin();
const wchar_t* pstr = mainGame->ebCardName->getText(); const wchar_t* pstr = mainGame->ebCardName->getText();
for(auto it = results.begin(); it != results.end(); ++it) { for(auto it = results.begin(); it != results.end(); ++it) {
if(wcscmp(pstr, dataManager.GetName((*it)->first)) == 0) { if(std::wcscmp(pstr, dataManager.GetName((*it)->first)) == 0) {
std::iter_swap(left, it); std::iter_swap(left, it);
++left; ++left;
} }
......
...@@ -141,10 +141,10 @@ void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) { ...@@ -141,10 +141,10 @@ void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) {
BufferIO::CopyCharArray(mainGame->ebServerPass->getText(), cscg.pass); BufferIO::CopyCharArray(mainGame->ebServerPass->getText(), cscg.pass);
cscg.info.rule = mainGame->cbRule->getSelected(); cscg.info.rule = mainGame->cbRule->getSelected();
cscg.info.mode = mainGame->cbMatchMode->getSelected(); cscg.info.mode = mainGame->cbMatchMode->getSelected();
cscg.info.start_hand = wcstol(mainGame->ebStartHand->getText(),nullptr,10); cscg.info.start_hand = std::wcstol(mainGame->ebStartHand->getText(),nullptr,10);
cscg.info.start_lp = wcstol(mainGame->ebStartLP->getText(),nullptr,10); cscg.info.start_lp = std::wcstol(mainGame->ebStartLP->getText(),nullptr,10);
cscg.info.draw_count = wcstol(mainGame->ebDrawCount->getText(),nullptr,10); cscg.info.draw_count = std::wcstol(mainGame->ebDrawCount->getText(),nullptr,10);
cscg.info.time_limit = wcstol(mainGame->ebTimeLimit->getText(),nullptr,10); cscg.info.time_limit = std::wcstol(mainGame->ebTimeLimit->getText(),nullptr,10);
cscg.info.lflist = mainGame->cbHostLFlist->getItemData(mainGame->cbHostLFlist->getSelected()); cscg.info.lflist = mainGame->cbHostLFlist->getItemData(mainGame->cbHostLFlist->getSelected());
cscg.info.duel_rule = mainGame->cbDuelRule->getSelected() + 1; cscg.info.duel_rule = mainGame->cbDuelRule->getSelected() + 1;
cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked(); cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked();
...@@ -732,7 +732,7 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) { ...@@ -732,7 +732,7 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
tm* localedtime = localtime(&starttime); tm* localedtime = localtime(&starttime);
wchar_t timetext[40]; wchar_t timetext[40];
wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime); std::wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime);
mainGame->ebRSName->setText(timetext); mainGame->ebRSName->setText(timetext);
if(!mainGame->chkAutoSaveReplay->isChecked()) { if(!mainGame->chkAutoSaveReplay->isChecked()) {
mainGame->wReplaySave->setText(dataManager.GetSysString(1340)); mainGame->wReplaySave->setText(dataManager.GetSysString(1340));
......
...@@ -1584,7 +1584,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1584,7 +1584,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code)); myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer); str.append(formatBuffer);
if(mcard->type & TYPE_MONSTER) { if(mcard->type & TYPE_MONSTER) {
if(mcard->alias && wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) { if(mcard->alias && std::wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
str.append(formatBuffer); str.append(formatBuffer);
} }
...@@ -1606,7 +1606,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1606,7 +1606,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
str.append(formatBuffer); str.append(formatBuffer);
} }
} else { } else {
if(mcard->alias && wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) { if(mcard->alias && std::wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
str.append(formatBuffer); str.append(formatBuffer);
} }
......
...@@ -84,13 +84,13 @@ HostInfo game_info; ...@@ -84,13 +84,13 @@ HostInfo game_info;
void Game::MainServerLoop() { void Game::MainServerLoop() {
#ifdef SERVER_ZIP_SUPPORT #ifdef SERVER_ZIP_SUPPORT
dataManager.FileSystem = new irr::io::CFileSystem(); DataManager::FileSystem = new irr::io::CFileSystem();
#endif #endif
deckManager.LoadLFList(); deckManager.LoadLFList();
dataManager.LoadDB(L"cards.cdb"); dataManager.LoadDB(L"cards.cdb");
LoadExpansions(); LoadExpansions();
#ifdef SERVER_PRO2_SUPPORT #ifdef SERVER_PRO2_SUPPORT
dataManager.FileSystem->addFileArchive("data/script.zip", true, false, EFAT_ZIP); DataManager::FileSystem->addFileArchive("data/script.zip", true, false, EFAT_ZIP);
#endif #endif
server_port = NetServer::StartServer(server_port); server_port = NetServer::StartServer(server_port);
...@@ -1182,7 +1182,7 @@ std::wstring Game::SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, ...@@ -1182,7 +1182,7 @@ std::wstring Game::SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth,
wchar_t strBuffer[4096]; wchar_t strBuffer[4096];
std::wstring ret; std::wstring ret;
for(size_t i = 0; text[i] != 0 && i < wcslen(text); ++i) { for(size_t i = 0; text[i] != 0 && i < std::wcslen(text); ++i) {
wchar_t c = text[i]; wchar_t c = text[i];
u32 w = font->getCharDimension(c).Width + font->getKerningWidth(c, prev); u32 w = font->getCharDimension(c).Width + font->getKerningWidth(c, prev);
prev = c; prev = c;
...@@ -1300,7 +1300,7 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU ...@@ -1300,7 +1300,7 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU
cbCategory->setSelected(2); cbCategory->setSelected(2);
if(selectlastused) { if(selectlastused) {
for(size_t i = 0; i < cbCategory->getItemCount(); ++i) { for(size_t i = 0; i < cbCategory->getItemCount(); ++i) {
if(!wcscmp(cbCategory->getItem(i), gameConf.lastcategory)) { if(!std::wcscmp(cbCategory->getItem(i), gameConf.lastcategory)) {
cbCategory->setSelected(i); cbCategory->setSelected(i);
break; break;
} }
...@@ -1309,7 +1309,7 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU ...@@ -1309,7 +1309,7 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU
RefreshDeck(cbCategory, cbDeck); RefreshDeck(cbCategory, cbDeck);
if(selectlastused) { if(selectlastused) {
for(size_t i = 0; i < cbDeck->getItemCount(); ++i) { for(size_t i = 0; i < cbDeck->getItemCount(); ++i) {
if(!wcscmp(cbDeck->getItem(i), gameConf.lastdeck)) { if(!std::wcscmp(cbDeck->getItem(i), gameConf.lastdeck)) {
cbDeck->setSelected(i); cbDeck->setSelected(i);
break; break;
} }
......
...@@ -44,7 +44,7 @@ int main(int argc, char* argv[]) { ...@@ -44,7 +44,7 @@ int main(int argc, char* argv[]) {
&& (!mystrncasecmp(pstrext, ".ydk", 4) || !mystrncasecmp(pstrext, ".yrp", 4))) { && (!mystrncasecmp(pstrext, ".ydk", 4) || !mystrncasecmp(pstrext, ".yrp", 4))) {
wchar_t exepath[MAX_PATH]; wchar_t exepath[MAX_PATH];
GetModuleFileNameW(nullptr, exepath, MAX_PATH); GetModuleFileNameW(nullptr, exepath, MAX_PATH);
wchar_t* p = wcsrchr(exepath, '\\'); wchar_t* p = std::wcsrchr(exepath, '\\');
*p = '\0'; *p = '\0';
SetCurrentDirectoryW(exepath); SetCurrentDirectoryW(exepath);
} }
...@@ -144,42 +144,42 @@ int main(int argc, char* argv[]) { ...@@ -144,42 +144,42 @@ int main(int argc, char* argv[]) {
ygo::dataManager.LoadDB(&wargv[i][2]); ygo::dataManager.LoadDB(&wargv[i][2]);
continue; continue;
} }
if(!wcscmp(wargv[i], L"-e")) { // extra database if(!std::wcscmp(wargv[i], L"-e")) { // extra database
++i; ++i;
if(i < wargc) { if(i < wargc) {
ygo::dataManager.LoadDB(wargv[i]); ygo::dataManager.LoadDB(wargv[i]);
} }
continue; continue;
} else if(!wcscmp(wargv[i], L"-n")) { // nickName } else if(!std::wcscmp(wargv[i], L"-n")) { // nickName
++i; ++i;
if(i < wargc) if(i < wargc)
ygo::mainGame->ebNickName->setText(wargv[i]); ygo::mainGame->ebNickName->setText(wargv[i]);
continue; continue;
} else if(!wcscmp(wargv[i], L"-h")) { // Host address } else if(!std::wcscmp(wargv[i], L"-h")) { // Host address
++i; ++i;
if(i < wargc) if(i < wargc)
ygo::mainGame->ebJoinHost->setText(wargv[i]); ygo::mainGame->ebJoinHost->setText(wargv[i]);
continue; continue;
} else if(!wcscmp(wargv[i], L"-p")) { // host Port } else if(!std::wcscmp(wargv[i], L"-p")) { // host Port
++i; ++i;
if(i < wargc) if(i < wargc)
ygo::mainGame->ebJoinPort->setText(wargv[i]); ygo::mainGame->ebJoinPort->setText(wargv[i]);
continue; continue;
} else if(!wcscmp(wargv[i], L"-w")) { // host passWord } else if(!std::wcscmp(wargv[i], L"-w")) { // host passWord
++i; ++i;
if(i < wargc) if(i < wargc)
ygo::mainGame->ebJoinPass->setText(wargv[i]); ygo::mainGame->ebJoinPass->setText(wargv[i]);
continue; continue;
} else if(!wcscmp(wargv[i], L"-k")) { // Keep on return } else if(!std::wcscmp(wargv[i], L"-k")) { // Keep on return
exit_on_return = false; exit_on_return = false;
keep_on_return = true; keep_on_return = true;
} else if(!wcscmp(wargv[i], L"--deck-category")) { } else if(!std::wcscmp(wargv[i], L"--deck-category")) {
++i; ++i;
if(i < wargc) { if(i < wargc) {
deckCategorySpecified = true; deckCategorySpecified = true;
BufferIO::CopyWideString(wargv[i], ygo::mainGame->gameConf.lastcategory); BufferIO::CopyWideString(wargv[i], ygo::mainGame->gameConf.lastcategory);
} }
} else if(!wcscmp(wargv[i], L"-d")) { // Deck } else if(!std::wcscmp(wargv[i], L"-d")) { // Deck
++i; ++i;
if(!deckCategorySpecified) if(!deckCategorySpecified)
ygo::mainGame->gameConf.lastcategory[0] = 0; ygo::mainGame->gameConf.lastcategory[0] = 0;
...@@ -203,17 +203,17 @@ int main(int argc, char* argv[]) { ...@@ -203,17 +203,17 @@ int main(int argc, char* argv[]) {
ClickButton(ygo::mainGame->btnDeckEdit); ClickButton(ygo::mainGame->btnDeckEdit);
break; break;
} }
} else if(!wcscmp(wargv[i], L"-c")) { // Create host } else if(!std::wcscmp(wargv[i], L"-c")) { // Create host
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu); ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
ClickButton(ygo::mainGame->btnHostConfirm); ClickButton(ygo::mainGame->btnHostConfirm);
break; break;
} else if(!wcscmp(wargv[i], L"-j")) { // Join host } else if(!std::wcscmp(wargv[i], L"-j")) { // Join host
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu); ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
ClickButton(ygo::mainGame->btnJoinHost); ClickButton(ygo::mainGame->btnJoinHost);
break; break;
} else if(!wcscmp(wargv[i], L"-r")) { // Replay } else if(!std::wcscmp(wargv[i], L"-r")) { // Replay
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
++i; ++i;
if(i < wargc) { if(i < wargc) {
...@@ -224,7 +224,7 @@ int main(int argc, char* argv[]) { ...@@ -224,7 +224,7 @@ int main(int argc, char* argv[]) {
if(open_file) if(open_file)
ClickButton(ygo::mainGame->btnLoadReplay); ClickButton(ygo::mainGame->btnLoadReplay);
break; break;
} else if(!wcscmp(wargv[i], L"-s")) { // Single } else if(!std::wcscmp(wargv[i], L"-s")) { // Single
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
++i; ++i;
if(i < wargc) { if(i < wargc) {
...@@ -235,8 +235,8 @@ int main(int argc, char* argv[]) { ...@@ -235,8 +235,8 @@ int main(int argc, char* argv[]) {
if(open_file) if(open_file)
ClickButton(ygo::mainGame->btnLoadSinglePlay); ClickButton(ygo::mainGame->btnLoadSinglePlay);
break; break;
} else if(wargc == 2 && wcslen(wargv[1]) >= 4) { } else if(wargc == 2 && std::wcslen(wargv[1]) >= 4) {
wchar_t* pstrext = wargv[1] + wcslen(wargv[1]) - 4; wchar_t* pstrext = wargv[1] + std::wcslen(wargv[1]) - 4;
if(!mywcsncasecmp(pstrext, L".ydk", 4)) { if(!mywcsncasecmp(pstrext, L".ydk", 4)) {
open_file = true; open_file = true;
BufferIO::CopyWideString(wargv[i], open_file_name); BufferIO::CopyWideString(wargv[i], open_file_name);
......
...@@ -98,7 +98,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -98,7 +98,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
evutil_freeaddrinfo(answer); evutil_freeaddrinfo(answer);
} }
} }
unsigned int remote_port = wcstol(portstr, nullptr, 10); unsigned int remote_port = std::wcstol(portstr, nullptr, 10);
BufferIO::CopyWideString(pstr, mainGame->gameConf.lasthost); BufferIO::CopyWideString(pstr, mainGame->gameConf.lasthost);
BufferIO::CopyWideString(portstr, mainGame->gameConf.lastport); BufferIO::CopyWideString(portstr, mainGame->gameConf.lastport);
if(DuelClient::StartClient(remote_addr, remote_port, false)) { if(DuelClient::StartClient(remote_addr, remote_port, false)) {
...@@ -257,7 +257,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -257,7 +257,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->dField.Clear(); mainGame->dField.Clear();
mainGame->HideElement(mainGame->wReplay); mainGame->HideElement(mainGame->wReplay);
mainGame->device->setEventReceiver(&mainGame->dField); mainGame->device->setEventReceiver(&mainGame->dField);
unsigned int start_turn = wcstol(mainGame->ebRepStartTurn->getText(), nullptr, 10); unsigned int start_turn = std::wcstol(mainGame->ebRepStartTurn->getText(), nullptr, 10);
if(start_turn == 1) if(start_turn == 1)
start_turn = 0; start_turn = 0;
ReplayMode::StartReplay(start_turn); ReplayMode::StartReplay(start_turn);
...@@ -435,14 +435,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -435,14 +435,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->RefreshCategoryDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); mainGame->RefreshCategoryDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
if(open_file && deckManager.LoadCurrentDeck(open_file_name)) { if(open_file && deckManager.LoadCurrentDeck(open_file_name)) {
#ifdef _WIN32 #ifdef _WIN32
wchar_t *dash = wcsrchr(open_file_name, L'\\'); wchar_t *dash = std::wcsrchr(open_file_name, L'\\');
#else #else
wchar_t *dash = wcsrchr(open_file_name, L'/'); wchar_t *dash = std::wcsrchr(open_file_name, L'/');
#endif #endif
wchar_t *dot = wcsrchr(open_file_name, L'.'); wchar_t *dot = std::wcsrchr(open_file_name, L'.');
if(dash && dot && !mywcsncasecmp(dot, L".ydk", 4)) { // full path if(dash && dot && !mywcsncasecmp(dot, L".ydk", 4)) { // full path
wchar_t deck_name[256]; wchar_t deck_name[256];
wcsncpy(deck_name, dash + 1, dot - dash - 1); std::wcsncpy(deck_name, dash + 1, dot - dash - 1);
deck_name[dot - dash - 1] = L'\0'; deck_name[dot - dash - 1] = L'\0';
mainGame->ebDeckname->setText(deck_name); mainGame->ebDeckname->setText(deck_name);
mainGame->cbDBCategory->setSelected(-1); mainGame->cbDBCategory->setSelected(-1);
...@@ -452,9 +452,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -452,9 +452,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->cbDBDecks->setEnabled(false); mainGame->cbDBDecks->setEnabled(false);
} else if(dash) { // has category } else if(dash) { // has category
wchar_t deck_name[256]; wchar_t deck_name[256];
wcsncpy(deck_name, dash + 1, 256); std::wcsncpy(deck_name, dash + 1, 256);
for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) { for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
if(!wcscmp(mainGame->cbDBDecks->getItem(i), deck_name)) { if(!std::wcscmp(mainGame->cbDBDecks->getItem(i), deck_name)) {
BufferIO::CopyWideString(deck_name, mainGame->gameConf.lastdeck); BufferIO::CopyWideString(deck_name, mainGame->gameConf.lastdeck);
mainGame->cbDBDecks->setSelected(i); mainGame->cbDBDecks->setSelected(i);
break; break;
...@@ -462,7 +462,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -462,7 +462,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
} }
} else { // only deck name } else { // only deck name
for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) { for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
if(!wcscmp(mainGame->cbDBDecks->getItem(i), open_file_name)) { if(!std::wcscmp(mainGame->cbDBDecks->getItem(i), open_file_name)) {
BufferIO::CopyWideString(open_file_name, mainGame->gameConf.lastdeck); BufferIO::CopyWideString(open_file_name, mainGame->gameConf.lastdeck);
mainGame->cbDBDecks->setSelected(i); mainGame->cbDBDecks->setSelected(i);
break; break;
...@@ -502,7 +502,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -502,7 +502,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
if(prev_operation == BUTTON_RENAME_REPLAY) { if(prev_operation == BUTTON_RENAME_REPLAY) {
wchar_t newname[256]; wchar_t newname[256];
BufferIO::CopyWideString(mainGame->ebRSName->getText(), newname); BufferIO::CopyWideString(mainGame->ebRSName->getText(), newname);
if(mywcsncasecmp(newname + wcslen(newname) - 4, L".yrp", 4)) { if(mywcsncasecmp(newname + std::wcslen(newname) - 4, L".yrp", 4)) {
myswprintf(newname, L"%ls.yrp", mainGame->ebRSName->getText()); myswprintf(newname, L"%ls.yrp", mainGame->ebRSName->getText());
} }
if(Replay::RenameReplay(mainGame->lstReplayList->getListItem(prev_sel), newname)) { if(Replay::RenameReplay(mainGame->lstReplayList->getListItem(prev_sel), newname)) {
...@@ -557,7 +557,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -557,7 +557,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
else else
curtime = ReplayMode::cur_replay.pheader.seed; curtime = ReplayMode::cur_replay.pheader.seed;
tm* st = localtime(&curtime); tm* st = localtime(&curtime);
wcsftime(infobuf, 256, L"%Y/%m/%d %H:%M:%S\n", st); std::wcsftime(infobuf, 256, L"%Y/%m/%d %H:%M:%S\n", st);
repinfo.append(infobuf); repinfo.append(infobuf);
wchar_t namebuf[4][20]{}; wchar_t namebuf[4][20]{};
ReplayMode::cur_replay.ReadName(namebuf[0]); ReplayMode::cur_replay.ReadName(namebuf[0]);
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
namespace ygo { namespace ygo {
constexpr int SIZE_NETWORK_BUFFER = 0x20000; constexpr int SIZE_NETWORK_BUFFER = 0x20000;
constexpr int MAX_DATA_SIZE = SIZE_NETWORK_BUFFER - 3; constexpr int MAX_DATA_SIZE = UINT16_MAX - 1;
constexpr int MAINC_MAX = 250; // the limit of card_state constexpr int MAINC_MAX = 250; // the limit of card_state
constexpr int SIDEC_MAX = MAINC_MAX; constexpr int SIDEC_MAX = MAINC_MAX;
......
...@@ -13,8 +13,8 @@ namespace ygo { ...@@ -13,8 +13,8 @@ namespace ygo {
#define REPLAY_UNIFORM 0x10 #define REPLAY_UNIFORM 0x10
// max size // max size
#define MAX_REPLAY_SIZE 0x20000 constexpr int MAX_REPLAY_SIZE = 0x20000;
#define MAX_COMP_SIZE 0x2000 constexpr int MAX_COMP_SIZE = UINT16_MAX + 1;
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
#define REPLAY_MODE_SAVE_IN_SERVER 0x1 #define REPLAY_MODE_SAVE_IN_SERVER 0x1
......
...@@ -63,18 +63,18 @@ void SingleDuel::JoinGame(DuelPlayer* dp, unsigned char* pdata, bool is_creater) ...@@ -63,18 +63,18 @@ void SingleDuel::JoinGame(DuelPlayer* dp, unsigned char* pdata, bool is_creater)
BufferIO::NullTerminate(pkt->pass); BufferIO::NullTerminate(pkt->pass);
BufferIO::CopyCharArray(pkt->pass, jpass); BufferIO::CopyCharArray(pkt->pass, jpass);
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
if(!wcscmp(jpass, L"the Big Brother") && !cache_recorder) { if(!std::wcscmp(jpass, L"the Big Brother") && !cache_recorder) {
is_recorder = true; is_recorder = true;
cache_recorder = dp; cache_recorder = dp;
} }
#ifndef YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY #ifndef YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY
if(!wcscmp(jpass, L"Marshtomp") && !replay_recorder) { if(!std::wcscmp(jpass, L"Marshtomp") && !replay_recorder) {
is_recorder = true; is_recorder = true;
replay_recorder = dp; replay_recorder = dp;
} }
#endif //YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY #endif //YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY
#else #else
if(wcscmp(jpass, pass)) { if(std::wcscmp(jpass, pass)) {
STOC_ErrorMsg scem; STOC_ErrorMsg scem;
scem.msg = ERRMSG_JOINERROR; scem.msg = ERRMSG_JOINERROR;
scem.code = 1; scem.code = 1;
...@@ -392,6 +392,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { ...@@ -392,6 +392,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void SingleDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) { void SingleDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
if(dp->type > 1 || ready[dp->type]) if(dp->type > 1 || ready[dp->type])
return; return;
if (len < 8 || len > sizeof(CTOS_DeckData))
return;
bool valid = true; bool valid = true;
const int deck_size = len - 2 * sizeof(int32_t); const int deck_size = len - 2 * sizeof(int32_t);
CTOS_DeckData deckbuf; CTOS_DeckData deckbuf;
......
...@@ -90,3 +90,4 @@ protected: ...@@ -90,3 +90,4 @@ protected:
} }
#endif //SINGLE_DUEL_H #endif //SINGLE_DUEL_H
...@@ -138,7 +138,7 @@ int SingleMode::SinglePlayThread() { ...@@ -138,7 +138,7 @@ int SingleMode::SinglePlayThread() {
time_t nowtime = time(nullptr); time_t nowtime = time(nullptr);
tm* localedtime = localtime(&nowtime); tm* localedtime = localtime(&nowtime);
wchar_t timetext[40]; wchar_t timetext[40];
wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime); std::wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime);
mainGame->ebRSName->setText(timetext); mainGame->ebRSName->setText(timetext);
if(!mainGame->chkAutoSaveReplay->isChecked()) { if(!mainGame->chkAutoSaveReplay->isChecked()) {
mainGame->wReplaySave->setText(dataManager.GetSysString(1340)); mainGame->wReplaySave->setText(dataManager.GetSysString(1340));
......
...@@ -67,18 +67,18 @@ void TagDuel::JoinGame(DuelPlayer* dp, unsigned char* pdata, bool is_creater) { ...@@ -67,18 +67,18 @@ void TagDuel::JoinGame(DuelPlayer* dp, unsigned char* pdata, bool is_creater) {
BufferIO::NullTerminate(pkt->pass); BufferIO::NullTerminate(pkt->pass);
BufferIO::CopyCharArray(pkt->pass, jpass); BufferIO::CopyCharArray(pkt->pass, jpass);
#ifdef YGOPRO_SERVER_MODE #ifdef YGOPRO_SERVER_MODE
if(!wcscmp(jpass, L"the Big Brother") && !cache_recorder) { if(!std::wcscmp(jpass, L"the Big Brother") && !cache_recorder) {
is_recorder = true; is_recorder = true;
cache_recorder = dp; cache_recorder = dp;
} }
#ifndef YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY #ifndef YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY
if(!wcscmp(jpass, L"Marshtomp") && !replay_recorder) { if(!std::wcscmp(jpass, L"Marshtomp") && !replay_recorder) {
is_recorder = true; is_recorder = true;
replay_recorder = dp; replay_recorder = dp;
} }
#endif //YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY #endif //YGOPRO_SERVER_MODE_DISABLE_CLOUD_REPLAY
#else #else
if(wcscmp(jpass, pass)) { if(std::wcscmp(jpass, pass)) {
STOC_ErrorMsg scem; STOC_ErrorMsg scem;
scem.msg = ERRMSG_JOINERROR; scem.msg = ERRMSG_JOINERROR;
scem.code = 1; scem.code = 1;
...@@ -378,6 +378,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { ...@@ -378,6 +378,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void TagDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) { void TagDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
if(dp->type > 3 || ready[dp->type]) if(dp->type > 3 || ready[dp->type])
return; return;
if (len < 8 || len > sizeof(CTOS_DeckData))
return;
bool valid = true; bool valid = true;
const int deck_size = len - 2 * sizeof(int32_t); const int deck_size = len - 2 * sizeof(int32_t);
CTOS_DeckData deckbuf; CTOS_DeckData deckbuf;
......
...@@ -88,3 +88,4 @@ protected: ...@@ -88,3 +88,4 @@ protected:
} }
#endif //TAG_DUEL_H #endif //TAG_DUEL_H
Subproject commit 87421ada2f3a956c008c06a1ff2a8faa735bf553 Subproject commit 488371e3164ba985c62255033968e60cb23c22eb
Subproject commit a3b6b284fea27f7601a6a479bdc22ac682939e8f Subproject commit 5a640df5b0d406573ebdb5a743bef38fd38e5ed3
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