Commit 2905dbdd authored by 水濑真白's avatar 水濑真白

Merge branch 'master' of git.moenext.com:nanahira/ygopro into develop

parents 8dfbb1f1 a794cfe2
name: Automated Test Build name: Automated Test Build
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on: on:
push: push:
branches: [ "master" ] branches: [ "master" ]
...@@ -120,7 +124,7 @@ jobs: ...@@ -120,7 +124,7 @@ jobs:
- name: Download miniaudio - name: Download miniaudio
if: matrix.audiolib == 'miniaudio' if: matrix.audiolib == 'miniaudio'
run: | run: |
git clone --depth=1 https://github.com/mercury233/miniaudio git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio cd miniaudio
xcopy /Y extras\miniaudio_split\miniaudio.* . xcopy /Y extras\miniaudio_split\miniaudio.* .
cd .. cd ..
...@@ -367,7 +371,7 @@ jobs: ...@@ -367,7 +371,7 @@ jobs:
- name: Download miniaudio - name: Download miniaudio
run: | run: |
git clone --depth=1 https://github.com/mercury233/miniaudio git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio cd miniaudio
cp extras/miniaudio_split/miniaudio.* . cp extras/miniaudio_split/miniaudio.* .
cd .. cd ..
...@@ -590,7 +594,7 @@ jobs: ...@@ -590,7 +594,7 @@ jobs:
- name: Download miniaudio - name: Download miniaudio
run: | run: |
git clone --depth=1 https://github.com/mercury233/miniaudio git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio cd miniaudio
cp extras/miniaudio_split/miniaudio.* . cp extras/miniaudio_split/miniaudio.* .
cd .. cd ..
......
No preview for this file type
...@@ -73,12 +73,12 @@ extern char** environ; ...@@ -73,12 +73,12 @@ extern char** environ;
#include "../ocgcore/ocgapi.h" #include "../ocgcore/ocgapi.h"
template<size_t N, typename... TR> template<size_t N, typename... TR>
inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR&&... args) { inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
return std::swprintf(buf, N, fmt, std::forward<TR>(args)...); return std::swprintf(buf, N, fmt, args...);
} }
template<size_t N, typename... TR> template<size_t N, typename... TR>
inline int mysnprintf(char(&buf)[N], const char* fmt, TR&&... args) { inline int mysnprintf(char(&buf)[N], const char* fmt, TR... args) {
return std::snprintf(buf, N, fmt, std::forward<TR>(args)...); return std::snprintf(buf, N, fmt, args...);
} }
inline FILE* mywfopen(const wchar_t* filename, const char* mode) { inline FILE* mywfopen(const wchar_t* filename, const char* mode) {
......
...@@ -6,6 +6,9 @@ namespace ygo { ...@@ -6,6 +6,9 @@ namespace ygo {
unsigned char DataManager::scriptBuffer[0x100000] = {}; unsigned char DataManager::scriptBuffer[0x100000] = {};
DataManager dataManager; DataManager dataManager;
static const char SELECT_STMT[] = "SELECT datas.id, datas.ot, datas.alias, datas.setcode, datas.type, datas.atk, datas.def, datas.level, datas.race, datas.attribute, datas.category,"
" texts.name, texts.desc, texts.str1, texts.str2, texts.str3, texts.str4, texts.str5, texts.str6, texts.str7, texts.str8,"
" texts.str9, texts.str10, texts.str11, texts.str12, texts.str13, texts.str14, texts.str15, texts.str16 FROM datas INNER JOIN texts ON datas.id = texts.id";
DataManager::DataManager() : _datas(32768), _strings(32768) { DataManager::DataManager() : _datas(32768), _strings(32768) {
extra_setcode = { extra_setcode = {
...@@ -15,8 +18,7 @@ DataManager::DataManager() : _datas(32768), _strings(32768) { ...@@ -15,8 +18,7 @@ DataManager::DataManager() : _datas(32768), _strings(32768) {
} }
bool DataManager::ReadDB(sqlite3* pDB) { bool DataManager::ReadDB(sqlite3* pDB) {
sqlite3_stmt* pStmt = nullptr; sqlite3_stmt* pStmt = nullptr;
const char* sql = "select * from datas,texts where datas.id=texts.id"; if (sqlite3_prepare_v2(pDB, SELECT_STMT, -1, &pStmt, nullptr) != SQLITE_OK)
if (sqlite3_prepare_v2(pDB, sql, -1, &pStmt, nullptr) != SQLITE_OK)
return Error(pDB, pStmt); return Error(pDB, pStmt);
wchar_t strBuffer[4096]; wchar_t strBuffer[4096];
for (int step = sqlite3_step(pStmt); step != SQLITE_DONE; step = sqlite3_step(pStmt)) { for (int step = sqlite3_step(pStmt); step != SQLITE_DONE; step = sqlite3_step(pStmt)) {
...@@ -46,17 +48,16 @@ bool DataManager::ReadDB(sqlite3* pDB) { ...@@ -46,17 +48,16 @@ bool DataManager::ReadDB(sqlite3* pDB) {
cd.attribute = static_cast<decltype(cd.attribute)>(sqlite3_column_int64(pStmt, 9)); cd.attribute = static_cast<decltype(cd.attribute)>(sqlite3_column_int64(pStmt, 9));
cd.category = static_cast<decltype(cd.category)>(sqlite3_column_int64(pStmt, 10)); cd.category = static_cast<decltype(cd.category)>(sqlite3_column_int64(pStmt, 10));
auto& cs = _strings[code]; auto& cs = _strings[code];
if (const char* text = (const char*)sqlite3_column_text(pStmt, 12)) { if (const char* text = (const char*)sqlite3_column_text(pStmt, 11)) {
BufferIO::DecodeUTF8(text, strBuffer); BufferIO::DecodeUTF8(text, strBuffer);
cs.name = strBuffer; cs.name = strBuffer;
} }
if (const char* text = (const char*)sqlite3_column_text(pStmt, 13)) { if (const char* text = (const char*)sqlite3_column_text(pStmt, 12)) {
BufferIO::DecodeUTF8(text, strBuffer); BufferIO::DecodeUTF8(text, strBuffer);
cs.text = strBuffer; cs.text = strBuffer;
} }
constexpr int desc_count = sizeof cs.desc / sizeof cs.desc[0]; for (int i = 0; i < DESC_COUNT; ++i) {
for (int i = 0; i < desc_count; ++i) { if (const char* text = (const char*)sqlite3_column_text(pStmt, 13 + i)) {
if (const char* text = (const char*)sqlite3_column_text(pStmt, i + 14)) {
BufferIO::DecodeUTF8(text, strBuffer); BufferIO::DecodeUTF8(text, strBuffer);
cs.desc[i] = strBuffer; cs.desc[i] = strBuffer;
} }
......
...@@ -19,7 +19,7 @@ namespace ygo { ...@@ -19,7 +19,7 @@ namespace ygo {
constexpr int MAX_STRING_ID = 0x7ff; constexpr int MAX_STRING_ID = 0x7ff;
constexpr uint32_t MIN_CARD_ID = (uint32_t)(MAX_STRING_ID + 1) >> 4; constexpr uint32_t MIN_CARD_ID = (uint32_t)(MAX_STRING_ID + 1) >> 4;
constexpr uint32_t MAX_CARD_ID = 0x0fffffffU; constexpr uint32_t MAX_CARD_ID = 0x0fffffffU;
using CardData = card_data; using CardData = card_data;
struct CardDataC { struct CardDataC {
uint32_t code{}; uint32_t code{};
...@@ -49,10 +49,11 @@ struct CardDataC { ...@@ -49,10 +49,11 @@ struct CardDataC {
return false; return false;
} }
}; };
constexpr int DESC_COUNT = 16;
struct CardString { struct CardString {
std::wstring name; std::wstring name;
std::wstring text; std::wstring text;
std::wstring desc[16]; std::wstring desc[DESC_COUNT];
}; };
using code_pointer = std::unordered_map<uint32_t, CardDataC>::const_iterator; using code_pointer = std::unordered_map<uint32_t, CardDataC>::const_iterator;
using string_pointer = std::unordered_map<uint32_t, CardString>::const_iterator; using string_pointer = std::unordered_map<uint32_t, CardString>::const_iterator;
......
...@@ -1954,15 +1954,17 @@ bool DeckBuilder::check_limit(code_pointer pointer) { ...@@ -1954,15 +1954,17 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
} }
return valid; return valid;
}; };
auto limitcode_has_credit = filterList->credits.find(limitcode) != filterList->credits.end();
auto handle_card = [&](ygo::code_pointer& card) { auto handle_card = [&](ygo::code_pointer& card) {
if (card->first == limitcode || card->second.alias == limitcode) { if (card->first == limitcode || card->second.alias == limitcode) {
limit--; limit--;
if(limit <= 0) if(limit < 0)
return false; return false;
} }
if(!limitcode_has_credit)
return true;
auto code = card->second.alias ? card->second.alias : card->first; auto code = card->second.alias ? card->second.alias : card->first;
spend_credit(code); return spend_credit(code);
return true;
}; };
for (auto& card : deckManager.current_deck.main) { for (auto& card : deckManager.current_deck.main) {
if(!handle_card(card)) if(!handle_card(card))
...@@ -1976,6 +1978,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) { ...@@ -1976,6 +1978,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
if(!handle_card(card)) if(!handle_card(card))
return false; return false;
} }
return spend_credit(limitcode); return handle_card(pointer);
} }
} }
...@@ -216,7 +216,7 @@ bool Game::Initialize() { ...@@ -216,7 +216,7 @@ bool Game::Initialize() {
SetWindowsIcon(); SetWindowsIcon();
//main menu //main menu
wchar_t strbuf[256]; wchar_t strbuf[256];
myswprintf(strbuf, L"KoishiPro %X.0%X.%X Synthetic", (PRO_VERSION & 0xf000U) >> 12, (PRO_VERSION & 0x0ff0U) >> 4, PRO_VERSION & 0x000fU); myswprintf(strbuf, L"KoishiPro %X.0%X.%X Loschen", (PRO_VERSION & 0xf000U) >> 12, (PRO_VERSION & 0x0ff0U) >> 4, PRO_VERSION & 0x000fU);
wMainMenu = env->addWindow(irr::core::rect<irr::s32>(370, 200, 650, 415), false, strbuf); wMainMenu = env->addWindow(irr::core::rect<irr::s32>(370, 200, 650, 415), false, strbuf);
wMainMenu->getCloseButton()->setVisible(false); wMainMenu->getCloseButton()->setVisible(false);
btnLanMode = env->addButton(irr::core::rect<irr::s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200)); btnLanMode = env->addButton(irr::core::rect<irr::s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200));
......
This diff is collapsed.
...@@ -16,8 +16,8 @@ VALUE "InternalName", "KoishiPro" ...@@ -16,8 +16,8 @@ VALUE "InternalName", "KoishiPro"
VALUE "LegalCopyright", "Copyright (C) 2023 Nanahira" VALUE "LegalCopyright", "Copyright (C) 2023 Nanahira"
VALUE "OriginalFilename", "ygopro.exe" VALUE "OriginalFilename", "ygopro.exe"
VALUE "ProductName", "KoishiPro" VALUE "ProductName", "KoishiPro"
VALUE "FileVersion", "Synthetic" VALUE "FileVersion", "Loschen"
VALUE "ProductVersion", "Synthetic" VALUE "ProductVersion", "Loschen"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
......
...@@ -1286,3 +1286,4 @@ ...@@ -1286,3 +1286,4 @@
!setname 0x1d7 艾克莉西娅 エクレシア !setname 0x1d7 艾克莉西娅 エクレシア
!setname 0x1d8 耀圣 エルフェンノーツ !setname 0x1d8 耀圣 エルフェンノーツ
!setname 0x1d9 磁力 マグネット !setname 0x1d9 磁力 マグネット
!setname 0x1da 世界末日 エンド・オブ・ザ・ワールド
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