Commit 731cb247 authored by mercury233's avatar mercury233
parents 68241602 9f33aab3
## ygopro(server) ## ygopro(server)
一个linux版的ygopro服务端,基于mycard代码修改。 一个linux版的ygopro服务端。
现用于[YGOPRO 233服](http://mercury233.me/ygosrv233/)
###编译 ###编译
* 需要以下组件 * 需要以下组件
* premake4 * premake4
* freetype
* libevent * libevent
* sqlite3 * sqlite3
* irrlicht1.8
* lua5.2 * lua5.2
* libGL
* libGLU
* gcc * gcc
* 可参考 https://github.com/mycard/mycard.github.io/tree/master/server 中的脚本 * 可参考 https://github.com/mercury233/ygopro-server/wiki 中的脚本
###运行 ###运行
* 使用[ygopro-server-lite](https://github.com/mercury233/ygopro-server)运行 * 使用[ygopro-server-lite](https://github.com/mercury233/ygopro-server)运行
......
No preview for this file type
...@@ -263,11 +263,9 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) { ...@@ -263,11 +263,9 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) {
return p1->first < p2->first; return p1->first < p2->first;
} }
bool ClientCard::deck_sort_name(code_pointer p1, code_pointer p2) { bool ClientCard::deck_sort_name(code_pointer p1, code_pointer p2) {
CardString cstr1; const wchar_t* name1 = dataManager.GetName(p1->first);
CardString cstr2; const wchar_t* name2 = dataManager.GetName(p2->first);
dataManager.GetString(p1->second.code, &cstr1); int res = wcscmp(name1, name2);
dataManager.GetString(p2->second.code, &cstr2);
int res = wcscmp(cstr1.name, cstr2.name);
if(res != 0) if(res != 0)
return res < 0; return res < 0;
return p1->first < p2->first; return p1->first < p2->first;
......
...@@ -41,7 +41,7 @@ struct CardString { ...@@ -41,7 +41,7 @@ struct CardString {
wchar_t* text; wchar_t* text;
wchar_t* desc[16]; wchar_t* desc[16];
}; };
typedef std::unordered_map<unsigned int, CardDataC>::iterator code_pointer; typedef std::unordered_map<unsigned int, CardDataC>::const_iterator code_pointer;
class ClientCard { class ClientCard {
public: public:
......
...@@ -380,6 +380,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -380,6 +380,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame->btnCardSelect[i]->setPressed(false); mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true); mainGame->btnCardSelect[i]->setVisible(true);
if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) { if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) {
wchar_t formatBuffer[2048];
if(chain && selectable_cards[i]->is_conti && !selectable_cards[i]->code) if(chain && selectable_cards[i]->is_conti && !selectable_cards[i]->code)
myswprintf(formatBuffer, L"%ls", DataManager::unknown_string); myswprintf(formatBuffer, L"%ls", DataManager::unknown_string);
else if(selectable_cards[i]->location == LOCATION_OVERLAY) else if(selectable_cards[i]->location == LOCATION_OVERLAY)
...@@ -397,12 +398,14 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -397,12 +398,14 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else { } else {
if(selectable_cards[i]->controler) if((selectable_cards[i]->controler)
|| ((selectable_cards[i]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (selectable_cards[i]->position & POS_FACEDOWN)))
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} }
} else { } else {
if(sort_list[i]) { if(sort_list[i]) {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%d", sort_list[i]); myswprintf(formatBuffer, L"%d", sort_list[i]);
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
} else mainGame->stCardPos[i]->setText(L""); } else mainGame->stCardPos[i]->setText(L"");
...@@ -447,6 +450,7 @@ void ClientField::ShowChainCard() { ...@@ -447,6 +450,7 @@ void ClientField::ShowChainCard() {
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225)); mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false); mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true); mainGame->btnCardSelect[i]->setVisible(true);
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence), myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence),
selectable_cards[i]->sequence + 1); selectable_cards[i]->sequence + 1);
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
...@@ -501,6 +505,7 @@ void ClientField::ShowLocationCard() { ...@@ -501,6 +505,7 @@ void ClientField::ShowLocationCard() {
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225)); mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardDisplay[i]->setPressed(false); mainGame->btnCardDisplay[i]->setPressed(false);
mainGame->btnCardDisplay[i]->setVisible(true); mainGame->btnCardDisplay[i]->setVisible(true);
wchar_t formatBuffer[2048];
if(display_cards[i]->location == LOCATION_OVERLAY) if(display_cards[i]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(display_cards[i]->overlayTarget->location, display_cards[i]->overlayTarget->sequence), dataManager.FormatLocation(display_cards[i]->overlayTarget->location, display_cards[i]->overlayTarget->sequence),
...@@ -516,7 +521,8 @@ void ClientField::ShowLocationCard() { ...@@ -516,7 +521,8 @@ void ClientField::ShowLocationCard() {
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} else { } else {
if(display_cards[i]->controler) if((display_cards[i]->controler)
|| ((display_cards[i]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (display_cards[i]->position & POS_FACEDOWN)))
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} }
......
...@@ -66,6 +66,7 @@ public: ...@@ -66,6 +66,7 @@ public:
std::vector<ClientCard*> selectsum_all; std::vector<ClientCard*> selectsum_all;
std::vector<ClientCard*> display_cards; std::vector<ClientCard*> display_cards;
std::vector<int> sort_list; std::vector<int> sort_list;
std::map<int, int> player_desc_hints[2];
bool grave_act; bool grave_act;
bool remove_act; bool remove_act;
bool deck_act; bool deck_act;
...@@ -115,11 +116,11 @@ public: ...@@ -115,11 +116,11 @@ public:
int command_location; int command_location;
size_t command_sequence; size_t command_sequence;
ClientCard* hovered_card; ClientCard* hovered_card;
int hovered_player;
ClientCard* clicked_card; ClientCard* clicked_card;
ClientCard* command_card; ClientCard* command_card;
ClientCard* highlighting_card; ClientCard* highlighting_card;
int list_command; int list_command;
wchar_t formatBuffer[2048];
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
void GetHoverField(int x, int y); void GetHoverField(int x, int y);
......
...@@ -72,8 +72,6 @@ bool DataManager::LoadStrings(const char* file) { ...@@ -72,8 +72,6 @@ bool DataManager::LoadStrings(const char* file) {
FILE* fp = fopen(file, "r"); FILE* fp = fopen(file, "r");
if(!fp) if(!fp)
return false; return false;
for(int i = 0; i < 2048; ++i)
_sysStrings[i] = 0;
char linebuf[256]; char linebuf[256];
char strbuf[256]; char strbuf[256];
int value; int value;
......
...@@ -827,6 +827,10 @@ void DeckBuilder::FilterCards() { ...@@ -827,6 +827,10 @@ void DeckBuilder::FilterCards() {
continue; continue;
if(filter_lm == 5 && data.ot != 2) if(filter_lm == 5 && data.ot != 2)
continue; continue;
if(filter_lm == 6 && data.ot != 3)
continue;
if(filter_lm == 7 && data.ot != 4)
continue;
} }
if(pstr) { if(pstr) {
if(pstr[0] == L'$') { if(pstr[0] == L'$') {
...@@ -892,29 +896,28 @@ void DeckBuilder::ClearFilter() { ...@@ -892,29 +896,28 @@ void DeckBuilder::ClearFilter() {
mainGame->chkCategory[i]->setChecked(false); mainGame->chkCategory[i]->setChecked(false);
} }
void DeckBuilder::SortList() { void DeckBuilder::SortList() {
auto left = results.begin();
const wchar_t* pstr = mainGame->ebCardName->getText();
for(auto it = results.begin(); it != results.end(); ++it) {
if(wcscmp(pstr, dataManager.GetName((*it)->first)) == 0) {
std::iter_swap(left, it);
++left;
}
}
switch(mainGame->cbSortType->getSelected()) { switch(mainGame->cbSortType->getSelected()) {
case 0: case 0:
std::sort(results.begin(), results.end(), ClientCard::deck_sort_lv); std::sort(left, results.end(), ClientCard::deck_sort_lv);
break; break;
case 1: case 1:
std::sort(results.begin(), results.end(), ClientCard::deck_sort_atk); std::sort(left, results.end(), ClientCard::deck_sort_atk);
break; break;
case 2: case 2:
std::sort(results.begin(), results.end(), ClientCard::deck_sort_def); std::sort(left, results.end(), ClientCard::deck_sort_def);
break; break;
case 3: case 3:
std::sort(results.begin(), results.end(), ClientCard::deck_sort_name); std::sort(left, results.end(), ClientCard::deck_sort_name);
break; break;
} }
const wchar_t* pstr = mainGame->ebCardName->getText();
for (size_t i = 0, pos = 0; i < results.size(); ++i){
code_pointer ptr = results[i];
if (wcscmp(pstr, dataManager.GetName(ptr->first))==0) {
results.insert(results.begin() + pos, ptr);
results.erase(results.begin() + i + 1);
pos++;
}
}
} }
} }
...@@ -2977,6 +2977,20 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -2977,6 +2977,20 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
} }
return true; return true;
} }
case MSG_PLAYER_HINT: {
int player = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
int chtype = BufferIO::ReadInt8(pbuf);
int value = BufferIO::ReadInt32(pbuf);
auto& player_desc_hints = mainGame->dField.player_desc_hints[player];
if(chtype == PHINT_DESC_ADD) {
player_desc_hints[value]++;
} else if(chtype == PHINT_DESC_REMOVE) {
player_desc_hints[value]--;
if(player_desc_hints[value] == 0)
player_desc_hints.erase(value);
}
return true;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
match_kill = BufferIO::ReadInt32(pbuf); match_kill = BufferIO::ReadInt32(pbuf);
return true; return true;
......
...@@ -456,6 +456,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -456,6 +456,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case BUTTON_CMD_SHOWLIST: { case BUTTON_CMD_SHOWLIST: {
mainGame->wCmdMenu->setVisible(false); mainGame->wCmdMenu->setVisible(false);
selectable_cards.clear(); selectable_cards.clear();
wchar_t formatBuffer[2048];
switch(command_location) { switch(command_location) {
case LOCATION_DECK: { case LOCATION_DECK: {
for(int32 i = (int32)deck[command_controler].size() - 1; i >= 0 ; --i) for(int32 i = (int32)deck[command_controler].size() - 1; i >= 0 ; --i)
...@@ -612,6 +613,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -612,6 +613,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case MSG_SORT_CARD: { case MSG_SORT_CARD: {
int offset = mainGame->scrCardList->getPos() / 10; int offset = mainGame->scrCardList->getPos() / 10;
int sel_seq = id - BUTTON_CARD_0 + offset; int sel_seq = id - BUTTON_CARD_0 + offset;
wchar_t formatBuffer[2048];
if(sort_list[sel_seq]) { if(sort_list[sel_seq]) {
select_min--; select_min--;
int sel = sort_list[sel_seq]; int sel = sort_list[sel_seq];
...@@ -742,6 +744,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -742,6 +744,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]); mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225)); mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
wchar_t formatBuffer[2048];
if(sort_list.size()) { if(sort_list.size()) {
if(sort_list[pos + i] > 0) if(sort_list[pos + i] > 0)
myswprintf(formatBuffer, L"%d", sort_list[pos + i]); myswprintf(formatBuffer, L"%d", sort_list[pos + i]);
...@@ -770,7 +773,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -770,7 +773,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} else { } else {
if(selectable_cards[i + pos]->is_selected) if(selectable_cards[i + pos]->is_selected)
mainGame->stCardPos[i]->setBackgroundColor(0xffffff00); mainGame->stCardPos[i]->setBackgroundColor(0xffffff00);
else if(selectable_cards[i + pos]->controler) else if((selectable_cards[i + pos]->controler)
|| ((selectable_cards[i + pos]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (selectable_cards[i + pos]->position & POS_FACEDOWN)))
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} }
...@@ -786,6 +790,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -786,6 +790,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else else
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]); mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225)); mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
wchar_t formatBuffer[2048];
if(display_cards[i + pos]->location == LOCATION_OVERLAY) { if(display_cards[i + pos]->location == LOCATION_OVERLAY) {
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(display_cards[i + pos]->overlayTarget->location, display_cards[i + pos]->overlayTarget->sequence), dataManager.FormatLocation(display_cards[i + pos]->overlayTarget->location, display_cards[i + pos]->overlayTarget->sequence),
...@@ -801,7 +806,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -801,7 +806,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} else { } else {
if(display_cards[i + pos]->controler) if((display_cards[i + pos]->controler)
|| ((display_cards[i + pos]->location & (LOCATION_EXTRA + LOCATION_REMOVED)) && (display_cards[i + pos]->position & POS_FACEDOWN)))
mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stDisplayPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff); else mainGame->stDisplayPos[i]->setBackgroundColor(0xffffffff);
} }
...@@ -919,6 +925,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -919,6 +925,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(hovered_location & 0xe) if(hovered_location & 0xe)
clicked_card = GetCard(hovered_controler, hovered_location, hovered_sequence); clicked_card = GetCard(hovered_controler, hovered_location, hovered_sequence);
else clicked_card = 0; else clicked_card = 0;
wchar_t formatBuffer[2048];
if(mainGame->dInfo.isReplay) { if(mainGame->dInfo.isReplay) {
if(mainGame->wCardSelect->isVisible()) if(mainGame->wCardSelect->isVisible())
break; break;
...@@ -1222,6 +1229,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1222,6 +1229,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
DuelClient::SetResponseB(respbuf, selectable_cards.size()); DuelClient::SetResponseB(respbuf, selectable_cards.size());
DuelClient::SendResponse(); DuelClient::SendResponse();
} else { } else {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, dataManager.GetSysString(204), select_counter_count, dataManager.GetCounterName(select_counter_type)); myswprintf(formatBuffer, dataManager.GetSysString(204), select_counter_count, dataManager.GetCounterName(select_counter_type));
mainGame->stHintMsg->setText(formatBuffer); mainGame->stHintMsg->setText(formatBuffer);
} }
...@@ -1378,22 +1386,40 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1378,22 +1386,40 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(x < 300) if(x < 300)
break; break;
ClientCard* mcard = 0; ClientCard* mcard = 0;
int mplayer = -1;
if(!panel || !panel->isVisible() || !panel->getRelativePosition().isPointInside(pos)) { if(!panel || !panel->isVisible() || !panel->getRelativePosition().isPointInside(pos)) {
GetHoverField(x, y); GetHoverField(x, y);
if(hovered_location & 0xe) if(hovered_location & 0xe)
mcard = GetCard(hovered_controler, hovered_location, hovered_sequence); mcard = GetCard(hovered_controler, hovered_location, hovered_sequence);
else if(hovered_location == LOCATION_GRAVE && grave[hovered_controler].size()) else if(hovered_location == LOCATION_GRAVE) {
mcard = *(grave[hovered_controler].rbegin()); if(grave[hovered_controler].size())
else if(hovered_location == LOCATION_REMOVED && remove[hovered_controler].size()) { mcard = grave[hovered_controler].back();
mcard = *(remove[hovered_controler].rbegin()); } else if(hovered_location == LOCATION_REMOVED) {
if(mcard->position & POS_FACEDOWN) if(remove[hovered_controler].size()) {
mcard = 0; mcard = remove[hovered_controler].back();
} else if(hovered_location == LOCATION_DECK && deck[hovered_controler].size()) if(mcard->position & POS_FACEDOWN)
mcard = *(deck[hovered_controler].rbegin()); mcard = 0;
else mcard = 0; }
} else if(hovered_location == LOCATION_DECK) {
if(deck[hovered_controler].size())
mcard = deck[hovered_controler].back();
} else {
if(irr::core::recti(327, 8, 630, 51).isPointInside(pos))
mplayer = 0;
else if(irr::core::recti(689, 8, 991, 51).isPointInside(pos))
mplayer = 1;
}
} }
if(hovered_location == LOCATION_HAND && (mainGame->dInfo.is_shuffling || mainGame->dInfo.curMsg == MSG_SHUFFLE_HAND)) if(hovered_location == LOCATION_HAND && (mainGame->dInfo.is_shuffling || mainGame->dInfo.curMsg == MSG_SHUFFLE_HAND))
mcard = 0; mcard = 0;
if(mcard == 0 && mplayer < 0)
mainGame->stTip->setVisible(false);
else if(mcard == hovered_card && mplayer == hovered_player) {
if(mainGame->stTip->isVisible()) {
irr::core::recti tpos = mainGame->stTip->getRelativePosition();
mainGame->stTip->setRelativePosition(irr::core::position2di(x - tpos.getWidth() - 10, mcard ? y - tpos.getHeight() - 10 : y + 10));
}
}
if(mcard != hovered_card) { if(mcard != hovered_card) {
if(hovered_card) { if(hovered_card) {
if(hovered_card->location == LOCATION_HAND && !mainGame->dInfo.is_shuffling && mainGame->dInfo.curMsg != MSG_SHUFFLE_HAND) { if(hovered_card->location == LOCATION_HAND && !mainGame->dInfo.is_shuffling && mainGame->dInfo.curMsg != MSG_SHUFFLE_HAND) {
...@@ -1425,22 +1451,20 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1425,22 +1451,20 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
if(mcard->equipTarget) if(mcard->equipTarget)
mcard->equipTarget->is_showequip = true; mcard->equipTarget->is_showequip = true;
if(mcard->equipped.size()) for(auto cit = mcard->equipped.begin(); cit != mcard->equipped.end(); ++cit)
for(auto cit = mcard->equipped.begin(); cit != mcard->equipped.end(); ++cit) (*cit)->is_showequip = true;
(*cit)->is_showequip = true; for(auto cit = mcard->cardTarget.begin(); cit != mcard->cardTarget.end(); ++cit)
if(mcard->cardTarget.size()) (*cit)->is_showtarget = true;
for(auto cit = mcard->cardTarget.begin(); cit != mcard->cardTarget.end(); ++cit) for(auto cit = mcard->ownerTarget.begin(); cit != mcard->ownerTarget.end(); ++cit)
(*cit)->is_showtarget = true; (*cit)->is_showtarget = true;
if(mcard->ownerTarget.size())
for(auto cit = mcard->ownerTarget.begin(); cit != mcard->ownerTarget.end(); ++cit)
(*cit)->is_showtarget = true;
if(mcard->code) { if(mcard->code) {
mainGame->ShowCardInfo(mcard->code); mainGame->ShowCardInfo(mcard->code);
if(mcard->location & 0xe) { if(mcard->location & 0xe) {
std::wstring str; std::wstring str;
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->type & TYPE_MONSTER) { if(mcard->type & TYPE_MONSTER) {
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10) if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)
&& wcscmp(dataManager.GetName(mcard->code), dataManager.GetName(mcard->alias))) { && 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));
...@@ -1456,32 +1480,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1456,32 +1480,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale); myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale);
str.append(formatBuffer); str.append(formatBuffer);
} }
if(mcard->counters.size()) {
for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) {
myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second);
str.append(formatBuffer);
}
}
if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) {
if(mcard->cHint == CHINT_TURN)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue);
else if(mcard->cHint == CHINT_CARD)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue));
else if(mcard->cHint == CHINT_RACE)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue));
else if(mcard->cHint == CHINT_ATTRIBUTE)
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
else if(mcard->cHint == CHINT_NUMBER)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
str.append(formatBuffer);
}
for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
} else { } else {
myswprintf(formatBuffer, L"%ls", dataManager.GetName(mcard->code));
str.append(formatBuffer);
if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)) { if(mcard->alias && (mcard->alias < mcard->code - 10 || mcard->alias > mcard->code + 10)) {
myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias)); myswprintf(formatBuffer, L"\n(%ls)", dataManager.GetName(mcard->alias));
str.append(formatBuffer); str.append(formatBuffer);
...@@ -1490,33 +1489,31 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1490,33 +1489,31 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale); myswprintf(formatBuffer, L"\n%d/%d", mcard->lscale, mcard->rscale);
str.append(formatBuffer); str.append(formatBuffer);
} }
if(mcard->counters.size()) { }
for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) { for(std::map<int, int>::iterator ctit = mcard->counters.begin(); ctit != mcard->counters.end(); ++ctit) {
myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second); myswprintf(formatBuffer, L"\n[%ls]: %d", dataManager.GetCounterName(ctit->first), ctit->second);
str.append(formatBuffer); str.append(formatBuffer);
} }
} if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) {
if(mcard->cHint && mcard->chValue && (mcard->location & LOCATION_ONFIELD)) { if(mcard->cHint == CHINT_TURN)
if(mcard->cHint == CHINT_TURN) myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue);
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(211), mcard->chValue); else if(mcard->cHint == CHINT_CARD)
else if(mcard->cHint == CHINT_CARD) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(212), dataManager.GetName(mcard->chValue)); else if(mcard->cHint == CHINT_RACE)
else if(mcard->cHint == CHINT_RACE) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(213), dataManager.FormatRace(mcard->chValue)); else if(mcard->cHint == CHINT_ATTRIBUTE)
else if(mcard->cHint == CHINT_ATTRIBUTE) myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue)); else if(mcard->cHint == CHINT_NUMBER)
else if(mcard->cHint == CHINT_NUMBER) myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue); str.append(formatBuffer);
str.append(formatBuffer); }
} for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) {
for(auto iter = mcard->desc_hints.begin(); iter != mcard->desc_hints.end(); ++iter) { myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first)); str.append(formatBuffer);
str.append(formatBuffer);
}
} }
mainGame->stTip->setVisible(true); mainGame->stTip->setVisible(true);
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()); irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y - 10 - dtip.Height, x, y)); mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y - 10 - dtip.Height, x - 10, y - 10));
mainGame->stTip->setText(str.c_str()); mainGame->stTip->setText(str.c_str());
} }
} else { } else {
...@@ -1529,15 +1526,36 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1529,15 +1526,36 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->stText->setText(L""); mainGame->stText->setText(L"");
mainGame->scrCardText->setVisible(false); mainGame->scrCardText->setVisible(false);
} }
} else {
mainGame->stTip->setVisible(false);
} }
hovered_card = mcard; hovered_card = mcard;
} else { }
if(mainGame->stTip->isVisible()) { if(mplayer != hovered_player) {
irr::core::recti tpos = mainGame->stTip->getRelativePosition(); if(mplayer >= 0) {
mainGame->stTip->setRelativePosition(irr::core::position2di(x - tpos.getWidth() - 10, y - tpos.getHeight() - 10)); const wchar_t* player_name;
if(mplayer == 0) {
if(!mainGame->dInfo.isTag || !mainGame->dInfo.tag_player[0])
player_name = mainGame->dInfo.hostname;
else
player_name = mainGame->dInfo.hostname_tag;
} else {
if(!mainGame->dInfo.isTag || !mainGame->dInfo.tag_player[1])
player_name = mainGame->dInfo.clientname;
else
player_name = mainGame->dInfo.clientname_tag;
}
std::wstring str(player_name);
wchar_t formatBuffer[2048];
const auto& player_desc_hints = mainGame->dField.player_desc_hints[mplayer];
for(auto iter = player_desc_hints.begin(); iter != player_desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
mainGame->stTip->setVisible(true);
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y + 10, x - 10, y + 10 + dtip.Height));
mainGame->stTip->setText(str.c_str());
} }
hovered_player = mplayer;
} }
break; break;
} }
...@@ -1669,6 +1687,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1669,6 +1687,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
break; break;
} }
if(display_cards.size()) { if(display_cards.size()) {
wchar_t formatBuffer[2048];
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(loc_id), display_cards.size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(loc_id), display_cards.size());
mainGame->wCardDisplay->setText(formatBuffer); mainGame->wCardDisplay->setText(formatBuffer);
ShowLocationCard(); ShowLocationCard();
...@@ -1844,7 +1863,7 @@ void ClientField::GetHoverField(int x, int y) { ...@@ -1844,7 +1863,7 @@ void ClientField::GetHoverField(int x, int y) {
hovered_sequence = 0; hovered_sequence = 0;
} }
} }
} }
} }
void ClientField::ShowMenu(int flag, int x, int y) { void ClientField::ShowMenu(int flag, int x, int y) {
if(!flag) { if(!flag) {
......
...@@ -5,23 +5,4 @@ ...@@ -5,23 +5,4 @@
#include "game.h" #include "game.h"
#include "client_card.h" #include "client_card.h"
namespace ygo {
class EventHandler : public irr::IEventReceiver {
public:
virtual bool OnEvent(const irr::SEvent& event);
void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y);
irr::gui::IGUIElement* panel;
int hovered_controler;
int hovered_location;
int hovered_sequence;
ClientCard* hovered_card;
ClientCard* clicked_card;
wchar_t formatBuffer[256];
};
}
#endif //EVENT_HANDLER_H #endif //EVENT_HANDLER_H
...@@ -106,6 +106,7 @@ bool Game::Initialize() { ...@@ -106,6 +106,7 @@ bool Game::Initialize() {
if(!dataManager.LoadStrings("strings.conf")) if(!dataManager.LoadStrings("strings.conf"))
return false; return false;
RefreshExpansionDB(); RefreshExpansionDB();
dataManager.LoadStrings("./expansions/strings.conf");
env = device->getGUIEnvironment(); env = device->getGUIEnvironment();
numFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.numfont, 16); numFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.numfont, 16);
adFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.numfont, 12); adFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.numfont, 12);
...@@ -485,6 +486,8 @@ bool Game::Initialize() { ...@@ -485,6 +486,8 @@ bool Game::Initialize() {
cbLimit->addItem(dataManager.GetSysString(1318)); cbLimit->addItem(dataManager.GetSysString(1318));
cbLimit->addItem(dataManager.GetSysString(1240)); cbLimit->addItem(dataManager.GetSysString(1240));
cbLimit->addItem(dataManager.GetSysString(1241)); cbLimit->addItem(dataManager.GetSysString(1241));
cbLimit->addItem(dataManager.GetSysString(1242));
cbLimit->addItem(dataManager.GetSysString(1243));
env->addStaticText(dataManager.GetSysString(1319), rect<s32>(10, 22 + 50 / 6, 70, 42 + 50 / 6), false, false, wFilter); env->addStaticText(dataManager.GetSysString(1319), rect<s32>(10, 22 + 50 / 6, 70, 42 + 50 / 6), false, false, wFilter);
cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 190, 40 + 50 / 6), wFilter, -1); cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 190, 40 + 50 / 6), wFilter, -1);
cbAttribute->setMaxSelectionRows(10); cbAttribute->setMaxSelectionRows(10);
......
...@@ -512,7 +512,7 @@ extern unsigned char draw_count; ...@@ -512,7 +512,7 @@ extern unsigned char draw_count;
#define BUTTON_SAVE_DECK 304 #define BUTTON_SAVE_DECK 304
#define BUTTON_SAVE_DECK_AS 305 #define BUTTON_SAVE_DECK_AS 305
#define BUTTON_DELETE_DECK 306 #define BUTTON_DELETE_DECK 306
#define BUTTON_DBEXIT 307 //#define BUTTON_DBEXIT 307
#define BUTTON_SORT_DECK 308 #define BUTTON_SORT_DECK 308
#define BUTTON_SIDE_OK 309 #define BUTTON_SIDE_OK 309
#define BUTTON_SHUFFLE_DECK 310 #define BUTTON_SHUFFLE_DECK 310
......
...@@ -765,6 +765,11 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -765,6 +765,11 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset); DuelClient::ClientAnalyze(offset, pbuf - offset);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
pbuf += 4; pbuf += 4;
break; break;
......
...@@ -1340,6 +1340,14 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1340,6 +1340,14 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_MATCH_KILL: { case MSG_MATCH_KILL: {
int code = BufferIO::ReadInt32(pbuf); int code = BufferIO::ReadInt32(pbuf);
if(match_mode) { if(match_mode) {
......
...@@ -601,6 +601,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) { ...@@ -601,6 +601,11 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
DuelClient::ClientAnalyze(offset, pbuf - offset); DuelClient::ClientAnalyze(offset, pbuf - offset);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_TAG_SWAP: { case MSG_TAG_SWAP: {
player = pbuf[0]; player = pbuf[0];
pbuf += pbuf[2] * 4 + pbuf[4] * 4 + 9; pbuf += pbuf[2] * 4 + pbuf[4] * 4 + 9;
......
...@@ -748,7 +748,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -748,7 +748,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case MSG_CONFIRM_CARDS: { case MSG_CONFIRM_CARDS: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
if(pbuf[5] == LOCATION_HAND) { if(pbuf[5] != LOCATION_DECK) {
pbuf += count * 7; pbuf += count * 7;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
...@@ -1385,6 +1385,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -1385,6 +1385,16 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
break; break;
} }
case MSG_PLAYER_HINT: {
pbuf += 6;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
NetServer::ReSendToPlayer(players[2]);
NetServer::ReSendToPlayer(players[3]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_TAG_SWAP: { case MSG_TAG_SWAP: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
/*int mcount = */BufferIO::ReadInt8(pbuf); /*int mcount = */BufferIO::ReadInt8(pbuf);
......
#[2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1] #[2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
!2016.7 !2016.7
#forbidden #forbidden
20663556 0 --イレカエル 20663556 0 --イレカエル
...@@ -1664,6 +1664,185 @@ ...@@ -1664,6 +1664,185 @@
53582587 2 --激流葬 53582587 2 --激流葬
29401950 2 --奈落の落とし穴 29401950 2 --奈落の落とし穴
!2016.8 TCG
#forbidden
27279764 0 --アポクリフォート・キラー
20663556 0 --イレカエル
44910027 0 --ヴィクトリー・ドラゴン
20366274 0 --エルシャドール・ネフィリム
40044918 0 --E·HERO エアーマン
53804307 0 --焔征竜-ブラスター
68819554 0 --Emダメージ・ジャグラー
07563579 0 --Emヒグルミ
17330916 0 --EMモンキーボード
82301904 0 --混沌帝龍 -終焉の使者-
79106360 0 --カオスポッド
90411554 0 --巌征竜-レドックス
08903700 0 --儀式魔人リリーサー
26202165 0 --クリッター
78010363 0 --黒き森のウィッチ
34124316 0 --サイバーポッド
21593977 0 --処刑人-マキュラ
81122844 0 --発条空母ゼンマイティ
56570271 0 --DHERO ディスクガイ
69015963 0 --デビル·フランケン
18326736 0 --星守の騎士 プトレマイオス
33184167 0 --同族感染ウィルス
90307777 0 --影霊衣の術士 シュリット
54719828 0 --No.16 色の支配者ショック·ルーラー
26400609 0 --瀑征竜-タイダル
78706415 0 --ファイバーポッド
93369354 0 --フィッシュボーグ-ガンナー
50321796 0 --氷結界の龍 ブリューナク
34206604 0 --魔導サイエンティスト
33508719 0 --メタモルポット
96782886 0 --メンタルマスター
03078576 0 --八汰烏
34086406 0 --ラヴァルバル·チェイン
89399912 0 --嵐征竜-テンペスト
46772449 0 --励輝士 ヴェルズビュート
14878871 0 --レスキューキャット
41482598 0 --悪夢の蜃気楼
44763025 0 --いたずら好きな双子悪魔
19613556 0 --大嵐
17375316 0 --押収
35059553 0 --カイザーコロシアム
74191942 0 --苦渋の選択
42829885 0 --強引な番兵
45986603 0 --強奪
55144522 0 --強欲な壺
04031928 0 --心変わり
23557835 0 --次元融合
83764718 0 --死者蘇生
57953380 0 --生還の宝札
87910978 0 --洗脳-ブレインコントロール
60682203 0 --大寒波
67616300 0 --チキンレース
48130397 0 --超融合
67169062 0 --貪欲な壺
27770341 0 --超再生能力
69243953 0 --蝶の短剣-エルマ
72892473 0 --手札抹殺
79571449 0 --天使の施し
42703248 0 --ハリケーン
18144506 0 --ハーピィの羽根帚
70828912 0 --早すぎた埋葬
34906152 0 --マスドライバー
46448938 0 --魔導書の神判
77565204 0 --未来融合-フューチャー·フュージョン
27970830 0 --六武の門
46411259 0 --突然変異
31222701 0 --揺れる眼差し
85602018 0 --遺言状
27174286 0 --異次元からの帰還
61740673 0 --王宮の勅命
93016201 0 --王宮の弾圧
41420027 0 --神の宣告
57585212 0 --自爆スイッチ
03280747 0 --第六感
64697231 0 --ダスト·シュート
35316708 0 --刻の封印
80604091 0 --血の代償
28566710 0 --ラストバトル!
#limit
85103922 1 --アーティファクト-モラルタ
64034255 1 --A·ジェネクス·バードマン
45222299 1 --イビリチュア·ガストクラーケ
11877465 1 --イビリチュア·マインドオーガス
99177923 1 --インフェルニティ·デーモン
68184115 1 --甲虫装機 ダンセル
69207766 1 --甲虫装機 ホーネット
27552504 1 --永遠の淑女 ベアトリーチェ
40318957 1 --EMドクロバット・ジョーカー
72989439 1 --カオス·ソルジャー -開闢の使者-
17412721 1 --旧神ノーデン
65518099 1 --クリフォート・ツール
72714461 1 --慧眼の魔術師
55885348 1 --Kozmo Dark Destroyer
12580477 1 --サンダー·ボルト
78868119 1 --深海のディーヴァ
48063985 1 --聖霊獣騎 カンナホーク
65192027 1 --ダーク·アームド·ドラゴン
15341821 1 --ダンディライオン
90953320 1 --TG ハイパー·ライブラリアン
96570609 1 --天帝アイテール
16226786 1 --深淵の暗殺者
80344569 1 --N·グラン·モール
18239909 1 --爆竜剣士イグニスターP
57143342 1 --彼岸の悪鬼 ガトルホッグ
20758643 1 --彼岸の悪鬼 グラバースニッチ
70583986 1 --氷結界の虎王ドゥローレン
52687916 1 --氷結界の龍 トリシューラ
33396948 1 --封印されしエクゾディア
07902349 1 --封印されし者の左腕
70903634 1 --封印されし者の右腕
44519536 1 --封印されし者の左足
08124921 1 --封印されし者の右足
26674724 1 --ブリューナクの影霊衣
10802915 1 --魔界発現世行きデスガイド
31178212 1 --マジェスペクター・ユニコーン
41386308 1 --マスマティシャン
89463537 1 --ユニコールの影霊衣
92746535 1 --竜剣士ラスターP
85138716 1 --レスキューラビット
88264978 1 --レッドアイズ·ダークネスメタルドラゴン
48976825 1 --異次元からの埋葬
33782437 1 --一時休戦
66957584 1 --インフェルニティガン
06417578 1 --神の写し身との接触
72405967 1 --王家の生け贄
81439173 1 --おろかな埋葬
96729612 1 --儀式の準備
67723438 1 --緊急テレポート
45305419 1 --継承の印
17639150 1 --機殻の生贄
95308449 1 --終焉のカウントダウン
74845897 1 --真炎の爆発
37520316 1 --精神操作
32807846 1 --増援
54447022 1 --ソウル・チャージ
14087893 1 --月の書
81674782 1 --次元の裂け目
79844764 1 --帝王の烈旋
70368879 1 --成金ゴブリン
22842126 1 --汎神の帝王
53208660 1 --ペンデュラム・コール
15854426 1 --霞の谷の神風
58577036 1 --名推理
43040603 1 --モンスターゲート
23171610 1 --リミッター解除
14733538 1 --竜呼相打つ
02295440 1 --ワン·フォー·ワン
09059700 1 --インフェルニティ・バリア
05851097 1 --虚無空間
84749824 1 --神の警告
94192409 1 --強制脱出装置
53582587 1 --激流葬
82732705 1 --スキルドレイン
73599290 1 --ソウルドレイン
29401950 1 --奈落の落とし穴
83555666 1 --破壊輪
17078030 1 --光の護封壁
30241314 1 --マクロコスモス
32723153 1 --マジカル·エクスプロージョン
54974237 1 --闇のデッキ破壊ウイルス
#semi limit
37742478 2 --オネスト
85087012 2 --カードガンナー
74311226 2 --海皇の竜騎隊
00423585 2 --召喚僧サモンプリースト
59297550 2 --ゼンマイマジシャン
23434538 2 --増殖するG
14943837 2 --デブリ·ドラゴン
28297833 2 --ネクロフェイス
71564252 2 --ライオウ
94886282 2 --光の援軍
53129443 2 --ブラック·ホール
62265044 2 --竜の渓谷
91623717 2 --連鎖爆撃
29843091 2 --おジャマトリオ
36468556 2 --停戦協定
!2016.4 TCG !2016.4 TCG
#forbidden #forbidden
27279764 0 --アポクリフォート・キラー 27279764 0 --アポクリフォート・キラー
......
Subproject commit ab9650d44585f01c2d95e64ff3047c12ca5ea2f3 Subproject commit bdfe3d7c4db18f1b66f0cab7874108411571bff2
Subproject commit 29da47a42accea0b27aa3b086c6e013576d8e547 Subproject commit 4a077c3c17def513f17d8a48d4d475714c2cc0ba
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
!system 1240 OCG !system 1240 OCG
!system 1241 TCG !system 1241 TCG
!system 1242 OCG&TCG !system 1242 OCG&TCG
!system 1243 专有卡禁止 !system 1243 自定义卡片
!system 1244 单局模式 !system 1244 单局模式
!system 1245 比赛模式 !system 1245 比赛模式
!system 1246 TAG !system 1246 TAG
...@@ -469,7 +469,7 @@ ...@@ -469,7 +469,7 @@
!setname 0x1 正义盟军 AOJ !setname 0x1 正义盟军 AOJ
!setname 0x2 次世代 ジェネクス !setname 0x2 次世代 ジェネクス
!setname 0x1002 真次世代 レアル·ジェネクス !setname 0x1002 真次世代 レアル·ジェネクス
!setname 0x2002 盟军·次世代 A・ジェネクス #!setname 0x2002 盟军·次世代 A・ジェネクス
#setname 0x3 N/A #setname 0x3 N/A
!setname 0x4 亚马逊 アマゾネス !setname 0x4 亚马逊 アマゾネス
!setname 0x5 秘仪之力 アルカナフォース !setname 0x5 秘仪之力 アルカナフォース
......
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