Commit 69fc4f35 authored by fallenstardust's avatar fallenstardust

复数关键词搜索

自动保存录像
parent e43c74fb
...@@ -18,7 +18,7 @@ ClientCard::ClientCard() { ...@@ -18,7 +18,7 @@ ClientCard::ClientCard() {
is_showtarget = false; is_showtarget = false;
is_showchaintarget = false; is_showchaintarget = false;
is_highlighting = false; is_highlighting = false;
is_disabled = false; status = 0;
is_reversed = false; is_reversed = false;
cmdFlag = 0; cmdFlag = 0;
code = 0; code = 0;
...@@ -164,10 +164,8 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -164,10 +164,8 @@ void ClientCard::UpdateInfo(char* buf) {
} }
if(flag & QUERY_OWNER) if(flag & QUERY_OWNER)
owner = BufferIO::ReadInt32(buf); owner = BufferIO::ReadInt32(buf);
if(flag & QUERY_IS_DISABLED) if(flag & QUERY_STATUS)
is_disabled = BufferIO::ReadInt32(buf); status = BufferIO::ReadInt32(buf);
if(flag & QUERY_IS_PUBLIC)
is_public = BufferIO::ReadInt32(buf);
if(flag & QUERY_LSCALE) { if(flag & QUERY_LSCALE) {
lscale = BufferIO::ReadInt32(buf); lscale = BufferIO::ReadInt32(buf);
myswprintf(lscstring, L"%d", lscale); myswprintf(lscstring, L"%d", lscale);
...@@ -212,8 +210,14 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) { ...@@ -212,8 +210,14 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
return c1->overlayTarget->sequence < c2->overlayTarget->sequence; return c1->overlayTarget->sequence < c2->overlayTarget->sequence;
else return c1->sequence < c2->sequence; else return c1->sequence < c2->sequence;
else { else {
if(c1->location & 0x71) if(c1->location & (LOCATION_DECK | LOCATION_GRAVE | LOCATION_REMOVED | LOCATION_EXTRA)) {
for(size_t i = 0; i < mainGame->dField.chains.size(); ++i) {
auto chit = mainGame->dField.chains[i];
if(c1 == chit.chain_card || chit.target.find(c1) != chit.target.end())
return true;
}
return c1->sequence > c2->sequence; return c1->sequence > c2->sequence;
}
else else
return c1->sequence < c2->sequence; return c1->sequence < c2->sequence;
} }
......
...@@ -89,8 +89,7 @@ public: ...@@ -89,8 +89,7 @@ public:
u8 location; u8 location;
u8 sequence; u8 sequence;
u8 position; u8 position;
u8 is_disabled; u32 status;
u8 is_public;
u8 cHint; u8 cHint;
u32 chValue; u32 chValue;
u32 opParam; u32 opParam;
......
...@@ -397,7 +397,8 @@ void Game::DrawCard(ClientCard* pcard) { ...@@ -397,7 +397,8 @@ void Game::DrawCard(ClientCard* pcard) {
matManager.mTexture.setTexture(0, imageManager.tChainTarget); matManager.mTexture.setTexture(0, imageManager.tChainTarget);
driver->setMaterial(matManager.mTexture); driver->setMaterial(matManager.mTexture);
driver->drawVertexPrimitiveList(matManager.vSymbol, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vSymbol, 4, matManager.iRectangle, 2);
} else if(pcard->is_disabled && (pcard->location & LOCATION_ONFIELD) && (pcard->position & POS_FACEUP)) { } else if((pcard->status & (STATUS_DISABLED | STATUS_FORBIDDEN))
&& (pcard->location & LOCATION_ONFIELD) && (pcard->position & POS_FACEUP)) {
matManager.mTexture.setTexture(0, imageManager.tNegated); matManager.mTexture.setTexture(0, imageManager.tNegated);
driver->setMaterial(matManager.mTexture); driver->setMaterial(matManager.mTexture);
driver->drawVertexPrimitiveList(matManager.vNegate, 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(matManager.vNegate, 4, matManager.iRectangle, 2);
......
...@@ -684,11 +684,22 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -684,11 +684,22 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
wchar_t timetext[40]; wchar_t timetext[40];
wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime); wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime);
mainGame->ebRSName->setText(timetext); mainGame->ebRSName->setText(timetext);
mainGame->wReplaySave->setText(dataManager.GetSysString(1340)); if(!mainGame->chkAutoSaveReplay->isChecked()) {
mainGame->PopupElement(mainGame->wReplaySave); mainGame->wReplaySave->setText(dataManager.GetSysString(1340));
mainGame->gMutex.Unlock(); mainGame->PopupElement(mainGame->wReplaySave);
mainGame->replaySignal.Reset(); mainGame->gMutex.Unlock();
mainGame->replaySignal.Wait(); mainGame->replaySignal.Reset();
mainGame->replaySignal.Wait();
}
else {
mainGame->actionParam = 1;
wchar_t msgbuf[256];
myswprintf(msgbuf, dataManager.GetSysString(1367), timetext);
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->guiFont, msgbuf);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(30);
}
if(mainGame->actionParam || !is_host) { if(mainGame->actionParam || !is_host) {
char* prep = pdata; char* prep = pdata;
Replay new_replay; Replay new_replay;
...@@ -1293,6 +1304,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1293,6 +1304,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
wchar_t ynbuf[256]; wchar_t ynbuf[256];
myswprintf(ynbuf, dataManager.GetSysString(200), dataManager.FormatLocation(l, s), dataManager.GetName(code)); myswprintf(ynbuf, dataManager.GetSysString(200), dataManager.FormatLocation(l, s), dataManager.GetName(code));
myswprintf(textBuffer, L"%ls\n%ls", event_string, ynbuf); myswprintf(textBuffer, L"%ls\n%ls", event_string, ynbuf);
} else if(desc == 221) {
wchar_t ynbuf[256];
myswprintf(ynbuf, dataManager.GetSysString(221), dataManager.FormatLocation(l, s), dataManager.GetName(code));
myswprintf(textBuffer, L"%ls\n%ls\n%ls", event_string, ynbuf, dataManager.GetSysString(223));
} else if(desc < 2048) { } else if(desc < 2048) {
myswprintf(textBuffer, dataManager.GetSysString(desc), dataManager.GetName(code)); myswprintf(textBuffer, dataManager.GetSysString(desc), dataManager.GetName(code));
} else { } else {
...@@ -1547,6 +1562,8 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1547,6 +1562,8 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
if(!forced) { if(!forced) {
if(count == 0) if(count == 0)
myswprintf(textBuffer, L"%ls\n%ls", dataManager.GetSysString(201), dataManager.GetSysString(202)); myswprintf(textBuffer, L"%ls\n%ls", dataManager.GetSysString(201), dataManager.GetSysString(202));
else if(select_trigger)
myswprintf(textBuffer, L"%ls\n%ls\n%ls", event_string, dataManager.GetSysString(222), dataManager.GetSysString(223));
else else
myswprintf(textBuffer, L"%ls\n%ls", event_string, dataManager.GetSysString(203)); myswprintf(textBuffer, L"%ls\n%ls", event_string, dataManager.GetSysString(203));
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer); mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer);
......
...@@ -434,6 +434,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -434,6 +434,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->wCardSelect->setText(dataManager.GetSysString(568)); mainGame->wCardSelect->setText(dataManager.GetSysString(568));
list_command = COMMAND_OPERATION; list_command = COMMAND_OPERATION;
} }
std::sort(selectable_cards.begin(), selectable_cards.end(), ClientCard::client_card_sort);
ShowSelectCard(true, true); ShowSelectCard(true, true);
} }
break; break;
...@@ -591,6 +592,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -591,6 +592,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
} }
list_command = COMMAND_LIST; list_command = COMMAND_LIST;
std::sort(selectable_cards.begin(), selectable_cards.end(), ClientCard::client_card_sort);
ShowSelectCard(true); ShowSelectCard(true);
break; break;
} }
...@@ -1801,6 +1803,15 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) { ...@@ -1801,6 +1803,15 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
switch(id) { switch(id) {
case CHECKBOX_AUTO_SEARCH: { case CHECKBOX_AUTO_SEARCH: {
mainGame->gameConf.auto_search_limit = mainGame->chkAutoSearch->isChecked() ? 0 : -1; mainGame->gameConf.auto_search_limit = mainGame->chkAutoSearch->isChecked() ? 0 : -1;
if(mainGame->is_building && !mainGame->is_siding)
mainGame->deckBuilder.InstantSearch();
return true;
break;
}
case CHECKBOX_MULTI_KEYWORDS: {
mainGame->gameConf.search_multiple_keywords = mainGame->chkMultiKeywords->isChecked() ? 1 : 0;
if(mainGame->is_building && !mainGame->is_siding)
mainGame->deckBuilder.InstantSearch();
return true; return true;
break; break;
} }
...@@ -2250,6 +2261,8 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e ...@@ -2250,6 +2261,8 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
if(pcard->code) { if(pcard->code) {
str.append(dataManager.GetName(pcard->code)); str.append(dataManager.GetName(pcard->code));
} }
if(pcard->status & STATUS_PROC_COMPLETE)
str.append(L"\n").append(dataManager.GetSysString(224));
for(size_t i = 0; i < chains.size(); ++i) { for(size_t i = 0; i < chains.size(); ++i) {
wchar_t formatBuffer[2048]; wchar_t formatBuffer[2048];
auto chit = chains[i]; auto chit = chains[i];
......
...@@ -465,6 +465,9 @@ bool Game::Initialize() { ...@@ -465,6 +465,9 @@ bool Game::Initialize() {
chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260 * xScale, posY + 30 * yScale), tabSystem, -1, dataManager.GetSysString(1357)); chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260 * xScale, posY + 30 * yScale), tabSystem, -1, dataManager.GetSysString(1357));
chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0); chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0);
posY += 60; posY += 60;
chkAutoSaveReplay = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260 * xScale, posY + 30 * yScale), tabSystem, -1, dataManager.GetSysString(1366));
chkAutoSaveReplay->setChecked(gameConf.auto_save_replay != 0);
posY += 60;
chkDrawFieldSpell = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260 * xScale, posY + 30 * yScale), tabSystem, CHECKBOX_DRAW_FIELD_SPELL, dataManager.GetSysString(1279)); chkDrawFieldSpell = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260 * xScale, posY + 30 * yScale), tabSystem, CHECKBOX_DRAW_FIELD_SPELL, dataManager.GetSysString(1279));
chkDrawFieldSpell->setChecked(gameConf.draw_field_spell != 0); chkDrawFieldSpell->setChecked(gameConf.draw_field_spell != 0);
posY += 60; posY += 60;
...@@ -1377,8 +1380,6 @@ void Game::LoadConfig() { ...@@ -1377,8 +1380,6 @@ void Game::LoadConfig() {
gameConf.chkRandomPos = android::getIntSetting(appMain, "chkRandomPos", 0); gameConf.chkRandomPos = android::getIntSetting(appMain, "chkRandomPos", 0);
gameConf.chkAutoChain = android::getIntSetting(appMain, "chkAutoChain", 0); gameConf.chkAutoChain = android::getIntSetting(appMain, "chkAutoChain", 0);
gameConf.chkWaitChain = android::getIntSetting(appMain, "chkWaitChain", 0); gameConf.chkWaitChain = android::getIntSetting(appMain, "chkWaitChain", 0);
gameConf.draw_field_spell = android::getIntSetting(appMain, "draw_field_spell", 0);
gameConf.quick_animation = android::getIntSetting(appMain, "quick_animation", 0);
//system //system
gameConf.chkIgnore1 = android::getIntSetting(appMain, "chkIgnore1", 0); gameConf.chkIgnore1 = android::getIntSetting(appMain, "chkIgnore1", 0);
gameConf.chkIgnore2 = android::getIntSetting(appMain, "chkIgnore2", 0); gameConf.chkIgnore2 = android::getIntSetting(appMain, "chkIgnore2", 0);
...@@ -1387,7 +1388,12 @@ void Game::LoadConfig() { ...@@ -1387,7 +1388,12 @@ void Game::LoadConfig() {
gameConf.draw_field_spell = android::getIntSetting(appMain, "draw_field_spell", 1); gameConf.draw_field_spell = android::getIntSetting(appMain, "draw_field_spell", 1);
gameConf.separate_clear_button = android::getIntSetting(appMain, "separate_clear_button", 1); gameConf.separate_clear_button = android::getIntSetting(appMain, "separate_clear_button", 1);
gameConf.chkIgnoreDeckChanges = android::getIntSetting(appMain, "chkIgnoreDeckChanges", 0); gameConf.chkIgnoreDeckChanges = android::getIntSetting(appMain, "chkIgnoreDeckChanges", 0);
gameConf.defaultOT = android::getIntSetting(appMain, "defaultOT", 1); gameConf.chkAutoSaveReplay = android::getIntSetting(appMain, "chkAutoSaveReplay", 0);
gameConf.draw_field_spell = android::getIntSetting(appMain, "draw_field_spell", 0);
gameConf.quick_animation = android::getIntSetting(appMain, "quick_animation", 0);
//defult Setting without checked
gameConf.search_multiple_keywords = 1;
gameConf.defaultOT = 1;
gameConf.auto_search_limit = 1; gameConf.auto_search_limit = 1;
//TEST BOT MODE //TEST BOT MODE
gameConf.enable_bot_mode = 1; gameConf.enable_bot_mode = 1;
...@@ -1405,10 +1411,6 @@ void Game::SaveConfig() { ...@@ -1405,10 +1411,6 @@ void Game::SaveConfig() {
android::saveIntSetting(appMain, "chkAutoChain", gameConf.chkAutoChain); android::saveIntSetting(appMain, "chkAutoChain", gameConf.chkAutoChain);
gameConf.chkWaitChain = chkWaitChain->isChecked() ? 1 : 0; gameConf.chkWaitChain = chkWaitChain->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "chkWaitChain", gameConf.chkWaitChain); android::saveIntSetting(appMain, "chkWaitChain", gameConf.chkWaitChain);
gameConf.draw_field_spell = chkDrawFieldSpell->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "draw_field_spell", gameConf.draw_field_spell);
gameConf.quick_animation = chkQuickAnimation->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "quick_animation", gameConf.quick_animation);
//system //system
gameConf.chkIgnore1 = chkIgnore1->isChecked() ? 1 : 0; gameConf.chkIgnore1 = chkIgnore1->isChecked() ? 1 : 0;
...@@ -1419,6 +1421,12 @@ void Game::SaveConfig() { ...@@ -1419,6 +1421,12 @@ void Game::SaveConfig() {
android::saveIntSetting(appMain, "chkHideSetname", gameConf.chkHideSetname); android::saveIntSetting(appMain, "chkHideSetname", gameConf.chkHideSetname);
gameConf.chkIgnoreDeckChanges = chkIgnoreDeckChanges->isChecked() ? 1 : 0; gameConf.chkIgnoreDeckChanges = chkIgnoreDeckChanges->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "chkIgnoreDeckChanges", gameConf.chkIgnoreDeckChanges); android::saveIntSetting(appMain, "chkIgnoreDeckChanges", gameConf.chkIgnoreDeckChanges);
gameConf.chkAutoSaveReplay = chkAutoSaveReplay->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "chkAutoSaveReplay", gameConf.chkAutoSaveReplay);
gameConf.draw_field_spell = chkDrawFieldSpell->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "draw_field_spell", gameConf.draw_field_spell);
gameConf.quick_animation = chkQuickAnimation->isChecked() ? 1 : 0;
android::saveIntSetting(appMain, "quick_animation", gameConf.quick_animation);
//gameConf.defaultOT = defaultOT->isChecked()?1:0; //gameConf.defaultOT = defaultOT->isChecked()?1:0;
// android::saveIntSetting(appMain, "defaultOT", gameConf.defaultOT); // android::saveIntSetting(appMain, "defaultOT", gameConf.defaultOT);
......
...@@ -41,10 +41,13 @@ struct Config { ...@@ -41,10 +41,13 @@ struct Config {
int draw_field_spell; int draw_field_spell;
int separate_clear_button; int separate_clear_button;
int auto_search_limit; int auto_search_limit;
int search_multiple_keywords;
int chkIgnoreDeckChanges; int chkIgnoreDeckChanges;
int defaultOT; int defaultOT;
int enable_bot_mode; int enable_bot_mode;
int quick_animation; int quick_animation;
int auto_save_replay;
int chkAutoSaveReplay;
}; };
struct DuelInfo { struct DuelInfo {
...@@ -244,10 +247,12 @@ public: ...@@ -244,10 +247,12 @@ public:
irr::gui::IGUICheckBox* chkWaitChain; irr::gui::IGUICheckBox* chkWaitChain;
irr::gui::IGUICheckBox* chkDrawFieldSpell; irr::gui::IGUICheckBox* chkDrawFieldSpell;
irr::gui::IGUICheckBox* chkQuickAnimation; irr::gui::IGUICheckBox* chkQuickAnimation;
irr::gui::IGUICheckBox* chkAutoSaveReplay;
irr::gui::IGUICheckBox* chkHideSetname; irr::gui::IGUICheckBox* chkHideSetname;
irr::gui::IGUICheckBox* chkHideHintButton; irr::gui::IGUICheckBox* chkHideHintButton;
irr::gui::IGUICheckBox* chkIgnoreDeckChanges; irr::gui::IGUICheckBox* chkIgnoreDeckChanges;
irr::gui::IGUICheckBox* chkAutoSearch; irr::gui::IGUICheckBox* chkAutoSearch;
irr::gui::IGUICheckBox* chkMultiKeywords;
//main menu //main menu
irr::gui::IGUIWindow* wMainMenu; irr::gui::IGUIWindow* wMainMenu;
irr::gui::IGUIButton* btnLanMode; irr::gui::IGUIButton* btnLanMode;
...@@ -642,6 +647,7 @@ extern Game* mainGame; ...@@ -642,6 +647,7 @@ extern Game* mainGame;
#define BUTTON_LOAD_SINGLEPLAY 351 #define BUTTON_LOAD_SINGLEPLAY 351
#define BUTTON_CANCEL_SINGLEPLAY 352 #define BUTTON_CANCEL_SINGLEPLAY 352
#define CHECKBOX_AUTO_SEARCH 360 #define CHECKBOX_AUTO_SEARCH 360
#define CHECKBOX_MULTI_KEYWORDS 372
#define CHECKBOX_DISABLE_CHAT 364 #define CHECKBOX_DISABLE_CHAT 364
#define CHECKBOX_DRAW_FIELD_SPELL 368 #define CHECKBOX_DRAW_FIELD_SPELL 368
#define CHECKBOX_QUICK_ANIMATION 369 #define CHECKBOX_QUICK_ANIMATION 369
......
...@@ -1487,18 +1487,17 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) { ...@@ -1487,18 +1487,17 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA); BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA);
BufferIO::WriteInt8(qbuf, player); BufferIO::WriteInt8(qbuf, player);
BufferIO::WriteInt8(qbuf, LOCATION_HAND); BufferIO::WriteInt8(qbuf, LOCATION_HAND);
int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_POSITION, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3);
int qlen = 0; int qlen = 0;
while(qlen < len) { while(qlen < len) {
int slen = BufferIO::ReadInt32(qbuf); int slen = BufferIO::ReadInt32(qbuf);
int qflag = *(int*)qbuf; int qflag = *(int*)qbuf;
int pos = slen - 8; int offset = 8;
if(qflag & QUERY_LSCALE) if(!(qflag & QUERY_CODE))
pos -= 4; offset -= 4;
if(qflag & QUERY_RSCALE) unsigned position = ((*(int*)(qbuf + offset)) >> 24) & 0xff;
pos -= 4; if(!(position & POS_FACEUP))
if(!qbuf[pos])
memset(qbuf, 0, slen - 4); memset(qbuf, 0, slen - 4);
qbuf += slen - 4; qbuf += slen - 4;
qlen += slen; qlen += slen;
......
...@@ -120,11 +120,21 @@ int SingleMode::SinglePlayThread(void* param) { ...@@ -120,11 +120,21 @@ int SingleMode::SinglePlayThread(void* param) {
wchar_t timetext[40]; wchar_t timetext[40];
wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime); wcsftime(timetext, 40, L"%Y-%m-%d %H-%M-%S", localedtime);
mainGame->ebRSName->setText(timetext); mainGame->ebRSName->setText(timetext);
mainGame->wReplaySave->setText(dataManager.GetSysString(1340)); if(!mainGame->chkAutoSaveReplay->isChecked()) {
mainGame->PopupElement(mainGame->wReplaySave); mainGame->wReplaySave->setText(dataManager.GetSysString(1340));
mainGame->gMutex.Unlock(); mainGame->PopupElement(mainGame->wReplaySave);
mainGame->replaySignal.Reset(); mainGame->gMutex.Unlock();
mainGame->replaySignal.Wait(); mainGame->replaySignal.Reset();
mainGame->replaySignal.Wait();
} else {
mainGame->actionParam = 1;
wchar_t msgbuf[256];
myswprintf(msgbuf, dataManager.GetSysString(1367), timetext);
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->guiFont, msgbuf);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(30);
}
if(mainGame->actionParam) if(mainGame->actionParam)
last_replay.SaveReplay(mainGame->ebRSName->getText()); last_replay.SaveReplay(mainGame->ebRSName->getText());
end_duel(pduel); end_duel(pduel);
......
...@@ -1583,18 +1583,17 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) { ...@@ -1583,18 +1583,17 @@ void TagDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA); BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA);
BufferIO::WriteInt8(qbuf, player); BufferIO::WriteInt8(qbuf, player);
BufferIO::WriteInt8(qbuf, LOCATION_HAND); BufferIO::WriteInt8(qbuf, LOCATION_HAND);
int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_POSITION, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, query_buffer, len + 3);
int qlen = 0; int qlen = 0;
while(qlen < len) { while(qlen < len) {
int slen = BufferIO::ReadInt32(qbuf); int slen = BufferIO::ReadInt32(qbuf);
int qflag = *(int*)qbuf; int qflag = *(int*)qbuf;
int pos = slen - 8; int offset = 8;
if(qflag & QUERY_LSCALE) if(!(qflag & QUERY_CODE))
pos -= 4; offset -= 4;
if(qflag & QUERY_RSCALE) unsigned position = ((*(int*)(qbuf + offset)) >> 24) & 0xff;
pos -= 4; if(!(position & POS_FACEUP))
if(!qbuf[pos])
memset(qbuf, 0, slen - 4); memset(qbuf, 0, slen - 4);
qbuf += slen - 4; qbuf += slen - 4;
qlen += slen; qlen += slen;
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
更新: 更新:
1.更新ygo内核; 1.更新ygo内核;
2.新卡DP21; 2.新卡DP21;
3.可选自动保存录像;
4.ygopro支持复数关键词查卡;
新增: 新增:
1.复制文本自动识别关键词卡查功能 1.复制文本自动识别关键词卡查功能
(格式:?+关键词;如“?青眼”) (格式:?+关键词;如“?青眼”)
......
...@@ -70,6 +70,13 @@ ...@@ -70,6 +70,13 @@
!system 215 已选择数字: !system 215 已选择数字:
!system 216 在连锁%d发动 !system 216 在连锁%d发动
!system 217 被连锁%d的[%ls]选择为对象 !system 217 被连锁%d的[%ls]选择为对象
!system 218 是否使用[%ls]的效果代替支付基本分?
!system 219 是否使用[%ls]的效果代替取除超量素材?
!system 220 是否使用[%ls]的效果代替取除指示物?
!system 221 是否在[%ls]发动[%ls]的诱发效果?
!system 222 是否要发动诱发效果?
!system 223 稍后将询问其他可以发动的效果。
!system 224 已用正规方法特殊召唤
!system 500 请选择要解放的卡 !system 500 请选择要解放的卡
!system 501 请选择要丢弃的手卡 !system 501 请选择要丢弃的手卡
!system 502 请选择要破坏的卡 !system 502 请选择要破坏的卡
...@@ -384,12 +391,14 @@ ...@@ -384,12 +391,14 @@
!system 1363 是否删除这个录像? !system 1363 是否删除这个录像?
!system 1364 重命名录像 !system 1364 重命名录像
!system 1365 重命名失败,可能存在同名文件 !system 1365 重命名失败,可能存在同名文件
!system 1366 重命名成功后请重新选择卡组 !system 1366 自动保存录像
!system 1367 录像已自动保存为%ls.yrp
!system 1370 星数↑ !system 1370 星数↑
!system 1371 攻击↑ !system 1371 攻击↑
!system 1372 守备↑ !system 1372 守备↑
!system 1373 名称↓ !system 1373 名称↓
!system 1374 连接标记 !system 1374 连接标记
!system 1378 使用多个关键词搜索卡片
!system 1380 人机模式 !system 1380 人机模式
!system 1381 残局模式 !system 1381 残局模式
!system 1382 人机信息: !system 1382 人机信息:
...@@ -421,6 +430,7 @@ ...@@ -421,6 +430,7 @@
!system 1419 副卡组数量应不超过15张,当前卡组数量为%d张。 !system 1419 副卡组数量应不超过15张,当前卡组数量为%d张。
!system 1420 有额外卡组卡片存在于主卡组,可能是额外卡组数量超过15张。 !system 1420 有额外卡组卡片存在于主卡组,可能是额外卡组数量超过15张。
!system 1421 宣言的卡不符合条件,不存在于本主机卡池中。 !system 1421 宣言的卡不符合条件,不存在于本主机卡池中。
!system 1499 重命名成功后请重新选择卡组
!system 1500 决斗结束。 !system 1500 决斗结束。
!system 1501 录像结束。 !system 1501 录像结束。
!system 1502 连接已断开。 !system 1502 连接已断开。
...@@ -922,3 +932,4 @@ ...@@ -922,3 +932,4 @@
!setname 0x121 魔妖 !setname 0x121 魔妖
!setname 0x122 女武神 Valkyrie !setname 0x122 女武神 Valkyrie
!setname 0x123 蔷薇龙 ローズ・ドラゴン !setname 0x123 蔷薇龙 ローズ・ドラゴン
!setname 0x124 机械天使 機械天使
...@@ -68,6 +68,15 @@ ...@@ -68,6 +68,15 @@
!system 213 Declared type: !system 213 Declared type:
!system 214 Declared attribute: !system 214 Declared attribute:
!system 215 Declared number: !system 215 Declared number:
!system 216 Activated in chain %d
!system 217 Target of (chain %d) [%ls]
!system 218 Pay LP by Effect of [%ls], instead?
!system 219 Detach XYZ material by Effect of [%ls], instead?
!system 220 Remove Counter(s) by Effect of [%ls], instead?
!system 221 on [%ls], Activate Trigger Effect of [%ls]?
!system 222 Activate Trigger Effect?
!system 223 and Ask other Trigger Effect activate later
!system 224 First Special Summoned by own Condition
!system 500 Select a monster to tribute !system 500 Select a monster to tribute
!system 501 Select a card to discard !system 501 Select a card to discard
!system 502 Select a card to destroy !system 502 Select a card to destroy
...@@ -382,12 +391,14 @@ ...@@ -382,12 +391,14 @@
!system 1363 OK to delete? !system 1363 OK to delete?
!system 1364 Replay Rename !system 1364 Replay Rename
!system 1365 Fail to rename, maybe there're replay with same name. !system 1365 Fail to rename, maybe there're replay with same name.
!system 1366 please rechoose deck after rename. !system 1366 Auto Save Replay
!system 1367 Replay already saved as %ls.yrp
!system 1370 Level !system 1370 Level
!system 1371 ATK !system 1371 ATK
!system 1372 DEF !system 1372 DEF
!system 1373 Name !system 1373 Name
!system 1374 Link Arrows !system 1374 Link Arrows
!system 1378 Multiple Keyword Search
!system 1380 Single Mode !system 1380 Single Mode
!system 1381 Puzzle Mode !system 1381 Puzzle Mode
!system 1382 Single Options: !system 1382 Single Options:
...@@ -419,6 +430,7 @@ ...@@ -419,6 +430,7 @@
!system 1419 The Side Deck includes at most 15 cards. Yours is %d. !system 1419 The Side Deck includes at most 15 cards. Yours is %d.
!system 1420 Some cards in your Main Deck should be in Extra Deck instead. Check if your Main Deck and Extra Deck are correctly built. !system 1420 Some cards in your Main Deck should be in Extra Deck instead. Check if your Main Deck and Extra Deck are correctly built.
!system 1421 The declared card is illegal, or not recognizable by the host. !system 1421 The declared card is illegal, or not recognizable by the host.
!system 1499 please rechoose deck after rename.
!system 1500 The duel ended. !system 1500 The duel ended.
!system 1501 Replay ended. !system 1501 Replay ended.
!system 1502 Connection has been lost. !system 1502 Connection has been lost.
...@@ -646,6 +658,7 @@ ...@@ -646,6 +658,7 @@
!setname 0x1047 Gem-Knight !setname 0x1047 Gem-Knight
!setname 0x48 Number !setname 0x48 Number
!setname 0x1048 Number C !setname 0x1048 Number C
!setname 0x5048 Number C39
!setname 0x49 Skyblaster !setname 0x49 Skyblaster
!setname 0x4a Timelord !setname 0x4a Timelord
!setname 0x4b Aesir !setname 0x4b Aesir
...@@ -908,7 +921,8 @@ ...@@ -908,7 +921,8 @@
!setname 0x11d Forbidden !setname 0x11d Forbidden
!setname 0x11e Danger! !setname 0x11e Danger!
!setname 0x11f Nephthys !setname 0x11f Nephthys
!setname 0x120 Prankids !setname 0x120 Prank-Kids
!setname 0x121 Mayakashi !setname 0x121 Mayakashi
!setname 0x122 Valkyrie !setname 0x122 Valkyrie
!setname 0x123 Rose Dragon !setname 0x123 Rose Dragon
\ No newline at end of file !setname 0x124 Machine Angel
\ No newline at end of file
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