Commit d2e17f58 authored by mercury233's avatar mercury233

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

parents 712f9cd6 7bc6117a
...@@ -27,6 +27,7 @@ ClientCard::ClientCard() { ...@@ -27,6 +27,7 @@ ClientCard::ClientCard() {
alias = 0; alias = 0;
level = 0; level = 0;
rank = 0; rank = 0;
link = 0;
race = 0; race = 0;
attribute = 0; attribute = 0;
attack = 0; attack = 0;
...@@ -35,6 +36,7 @@ ClientCard::ClientCard() { ...@@ -35,6 +36,7 @@ ClientCard::ClientCard() {
base_defense = 0; base_defense = 0;
lscale = 0; lscale = 0;
rscale = 0; rscale = 0;
link_marker = 0;
cHint = 0; cHint = 0;
chValue = 0; chValue = 0;
atkstring[0] = 0; atkstring[0] = 0;
...@@ -101,7 +103,10 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -101,7 +103,10 @@ void ClientCard::UpdateInfo(char* buf) {
} }
if(flag & QUERY_DEFENSE) { if(flag & QUERY_DEFENSE) {
defense = BufferIO::ReadInt32(buf); defense = BufferIO::ReadInt32(buf);
if(defense < 0) { if(type & TYPE_LINK) {
defstring[0] = '-';
defstring[1] = 0;
} else if(defense < 0) {
defstring[0] = '?'; defstring[0] = '?';
defstring[1] = 0; defstring[1] = 0;
} else } else
...@@ -162,6 +167,16 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -162,6 +167,16 @@ void ClientCard::UpdateInfo(char* buf) {
rscale = BufferIO::ReadInt32(buf); rscale = BufferIO::ReadInt32(buf);
myswprintf(rscstring, L"%d", rscale); myswprintf(rscstring, L"%d", rscale);
} }
if(flag & QUERY_LINK) {
pdata = BufferIO::ReadInt32(buf);
if (link != (unsigned int)pdata) {
link = pdata;
}
pdata = BufferIO::ReadInt32(buf);
if (link_marker != (unsigned int)pdata) {
link_marker = pdata;
}
}
} }
void ClientCard::ClearTarget() { void ClientCard::ClearTarget() {
for(auto cit = cardTarget.begin(); cit != cardTarget.end(); ++cit) { for(auto cit = cardTarget.begin(); cit != cardTarget.end(); ++cit) {
...@@ -197,8 +212,8 @@ bool ClientCard::deck_sort_lv(code_pointer p1, code_pointer p2) { ...@@ -197,8 +212,8 @@ bool ClientCard::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);
if((p1->second.type & 0x7) == 1) { if((p1->second.type & 0x7) == 1) {
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
...@@ -223,8 +238,8 @@ bool ClientCard::deck_sort_atk(code_pointer p1, code_pointer p2) { ...@@ -223,8 +238,8 @@ bool ClientCard::deck_sort_atk(code_pointer p1, code_pointer p2) {
return p1->second.defense > p2->second.defense; return p1->second.defense > p2->second.defense;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
return p1->second.level > p2->second.level; return p1->second.level > p2->second.level;
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
return p1->first < p2->first; return p1->first < p2->first;
...@@ -243,8 +258,8 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) { ...@@ -243,8 +258,8 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) {
return p1->second.attack > p2->second.attack; return p1->second.attack > p2->second.attack;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
return p1->second.level > p2->second.level; return p1->second.level > p2->second.level;
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
return p1->first < p2->first; return p1->first < p2->first;
......
...@@ -20,6 +20,7 @@ struct CardData { ...@@ -20,6 +20,7 @@ struct CardData {
int defense; int defense;
unsigned int lscale; unsigned int lscale;
unsigned int rscale; unsigned int rscale;
unsigned int link_marker;
}; };
struct CardDataC { struct CardDataC {
unsigned int code; unsigned int code;
...@@ -33,6 +34,7 @@ struct CardDataC { ...@@ -33,6 +34,7 @@ struct CardDataC {
int defense; int defense;
unsigned int lscale; unsigned int lscale;
unsigned int rscale; unsigned int rscale;
unsigned int link_marker;
unsigned int ot; unsigned int ot;
unsigned int category; unsigned int category;
}; };
...@@ -69,6 +71,7 @@ public: ...@@ -69,6 +71,7 @@ public:
u32 type; u32 type;
u32 level; u32 level;
u32 rank; u32 rank;
u32 link;
u32 attribute; u32 attribute;
u32 race; u32 race;
s32 attack; s32 attack;
...@@ -77,6 +80,7 @@ public: ...@@ -77,6 +80,7 @@ public:
s32 base_defense; s32 base_defense;
u32 lscale; u32 lscale;
u32 rscale; u32 rscale;
u32 link_marker;
u32 reason; u32 reason;
u32 select_seq; u32 select_seq;
u8 owner; u8 owner;
......
This diff is collapsed.
...@@ -41,7 +41,7 @@ public: ...@@ -41,7 +41,7 @@ public:
std::vector<int> select_options; std::vector<int> select_options;
std::vector<ChainInfo> chains; std::vector<ChainInfo> chains;
int extra_p_count[2]; int extra_p_count[2];
size_t selected_option; size_t selected_option;
ClientCard* attacker; ClientCard* attacker;
ClientCard* attack_target; ClientCard* attack_target;
......
...@@ -31,6 +31,11 @@ bool DataManager::LoadDB(const char* file) { ...@@ -31,6 +31,11 @@ bool DataManager::LoadDB(const char* file) {
cd.type = sqlite3_column_int(pStmt, 4); cd.type = sqlite3_column_int(pStmt, 4);
cd.attack = sqlite3_column_int(pStmt, 5); cd.attack = sqlite3_column_int(pStmt, 5);
cd.defense = sqlite3_column_int(pStmt, 6); cd.defense = sqlite3_column_int(pStmt, 6);
if(cd.type & TYPE_LINK) {
cd.link_marker = cd.defense;
cd.defense = 0;
} else
cd.link_marker = 0;
unsigned int level = sqlite3_column_int(pStmt, 7); unsigned int level = sqlite3_column_int(pStmt, 7);
cd.level = level & 0xff; cd.level = level & 0xff;
cd.lscale = (level >> 24) & 0xff; cd.lscale = (level >> 24) & 0xff;
...@@ -267,7 +272,7 @@ const wchar_t* DataManager::FormatType(int type) { ...@@ -267,7 +272,7 @@ const wchar_t* DataManager::FormatType(int type) {
wchar_t* p = tpBuffer; wchar_t* p = tpBuffer;
unsigned filter = 1; unsigned filter = 1;
int i = 1050; int i = 1050;
for(; filter != 0x4000000; filter <<= 1, ++i) { for(; filter != 0x8000000; filter <<= 1, ++i) {
if(type & filter) { if(type & filter) {
BufferIO::CopyWStrRef(GetSysString(i), p, 16); BufferIO::CopyWStrRef(GetSysString(i), p, 16);
*p = L'|'; *p = L'|';
......
...@@ -319,6 +319,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -319,6 +319,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->cbCardType2->addItem(dataManager.GetSysString(1063), TYPE_MONSTER + TYPE_SYNCHRO); mainGame->cbCardType2->addItem(dataManager.GetSysString(1063), TYPE_MONSTER + TYPE_SYNCHRO);
mainGame->cbCardType2->addItem(dataManager.GetSysString(1073), TYPE_MONSTER + TYPE_XYZ); mainGame->cbCardType2->addItem(dataManager.GetSysString(1073), TYPE_MONSTER + TYPE_XYZ);
mainGame->cbCardType2->addItem(dataManager.GetSysString(1074), TYPE_MONSTER + TYPE_PENDULUM); mainGame->cbCardType2->addItem(dataManager.GetSysString(1074), TYPE_MONSTER + TYPE_PENDULUM);
mainGame->cbCardType2->addItem(dataManager.GetSysString(1076), TYPE_MONSTER + TYPE_LINK);
mainGame->cbCardType2->addItem(dataManager.GetSysString(1075), TYPE_MONSTER + TYPE_SPSUMMON); mainGame->cbCardType2->addItem(dataManager.GetSysString(1075), TYPE_MONSTER + TYPE_SPSUMMON);
myswprintf(normaltuner, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1062)); myswprintf(normaltuner, L"%ls|%ls", dataManager.GetSysString(1054), dataManager.GetSysString(1062));
mainGame->cbCardType2->addItem(normaltuner, TYPE_MONSTER + TYPE_NORMAL + TYPE_TUNER); mainGame->cbCardType2->addItem(normaltuner, TYPE_MONSTER + TYPE_NORMAL + TYPE_TUNER);
...@@ -375,6 +376,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -375,6 +376,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->env->setFocus(0); mainGame->env->setFocus(0);
break; break;
} }
case COMBOBOX_SECONDTYPE: {
if (mainGame->cbCardType->getSelected() == 1) {
if (mainGame->cbCardType2->getSelected() == 8) {
mainGame->ebDefense->setEnabled(false);
mainGame->ebDefense->setText(L"");
} else {
mainGame->ebDefense->setEnabled(true);
}
}
break;
}
} }
} }
default: break; default: break;
...@@ -431,7 +443,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -431,7 +443,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(!is_draging) if(!is_draging)
break; break;
if(!mainGame->is_siding) { if(!mainGame->is_siding) {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040))) if((hovered_pos == 1 && (draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
|| (hovered_pos == 2 && !(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK))))
hovered_pos = 0; hovered_pos = 0;
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 60) { if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 60) {
if(hovered_seq == -1) if(hovered_seq == -1)
...@@ -457,7 +470,9 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -457,7 +470,9 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} else if (hovered_pos == 4) } else if (hovered_pos == 4)
is_draging = false; is_draging = false;
} else { } else {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4) if((hovered_pos == 1 && (draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
|| (hovered_pos == 2 && !(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
|| hovered_pos == 4)
hovered_pos = 0; hovered_pos = 0;
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 65) { if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 65) {
if(hovered_seq == -1) if(hovered_seq == -1)
...@@ -513,11 +528,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -513,11 +528,11 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
} }
} else { } else {
if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 20) { if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 20) {
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq); deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
} }
if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 64) { if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 64) {
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq); deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
} }
...@@ -551,10 +566,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -551,10 +566,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(!is_draging) if(!is_draging)
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq); deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
else { else {
if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) { if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15) {
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false; is_draging = false;
} else if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) { } else if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60) {
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
is_draging = false; is_draging = false;
} }
...@@ -584,9 +599,9 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -584,9 +599,9 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
limit--; limit--;
if(limit <= 0) if(limit <= 0)
break; break;
if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) { if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15) {
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
} else if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) { } else if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60) {
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
} else if (deckManager.current_deck.side.size() < 15) { } else if (deckManager.current_deck.side.size() < 15) {
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
...@@ -637,15 +652,15 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -637,15 +652,15 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if (deckManager.current_deck.side.size() < 15) if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
else { else {
if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) if ((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15)
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) else if (!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60)
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
} }
} else { } else {
if ((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 15) if ((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15)
deckManager.current_deck.extra.push_back(draging_pointer); deckManager.current_deck.extra.push_back(draging_pointer);
else if (!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 60) else if (!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60)
deckManager.current_deck.main.push_back(draging_pointer); deckManager.current_deck.main.push_back(draging_pointer);
else if (deckManager.current_deck.side.size() < 15) else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer); deckManager.current_deck.side.push_back(draging_pointer);
...@@ -810,7 +825,8 @@ void DeckBuilder::FilterCards() { ...@@ -810,7 +825,8 @@ void DeckBuilder::FilterCards() {
if(filter_deftype) { if(filter_deftype) {
if((filter_deftype == 1 && data.defense != filter_def) || (filter_deftype == 2 && data.defense < filter_def) if((filter_deftype == 1 && data.defense != filter_def) || (filter_deftype == 2 && data.defense < filter_def)
|| (filter_deftype == 3 && data.defense <= filter_def) || (filter_deftype == 4 && (data.defense > filter_def || data.defense < 0)) || (filter_deftype == 3 && data.defense <= filter_def) || (filter_deftype == 4 && (data.defense > filter_def || data.defense < 0))
|| (filter_deftype == 5 && (data.defense >= filter_def || data.defense < 0)) || (filter_deftype == 6 && data.defense != -2)) || (filter_deftype == 5 && (data.defense >= filter_def || data.defense < 0)) || (filter_deftype == 6 && data.defense != -2)
|| (data.type & TYPE_LINK))
continue; continue;
} }
if(filter_lvtype) { if(filter_lvtype) {
......
...@@ -84,7 +84,7 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_ ...@@ -84,7 +84,7 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_
code_pointer cit = deck.main[i]; code_pointer cit = deck.main[i];
if((!allow_ocg && (cit->second.ot == 0x1)) || (!allow_tcg && (cit->second.ot == 0x2))) if((!allow_ocg && (cit->second.ot == 0x1)) || (!allow_tcg && (cit->second.ot == 0x2)))
return cit->first; return cit->first;
if(cit->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_TOKEN)) if(cit->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_TOKEN | TYPE_LINK))
return 1; return 1;
int code = cit->second.alias ? cit->second.alias : cit->first; int code = cit->second.alias ? cit->second.alias : cit->first;
ccount[code]++; ccount[code]++;
...@@ -127,7 +127,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) { ...@@ -127,7 +127,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
continue; continue;
if(cd.type & TYPE_TOKEN) if(cd.type & TYPE_TOKEN)
continue; continue;
else if(cd.type & 0x802040 && deck.extra.size() < 15) { else if(cd.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK) && deck.extra.size() < 15) {
deck.extra.push_back(dataManager.GetCodePointer(code)); //verified by GetData() deck.extra.push_back(dataManager.GetCodePointer(code)); //verified by GetData()
} else if(deck.main.size() < 60) { } else if(deck.main.size() < 60) {
deck.main.push_back(dataManager.GetCodePointer(code)); deck.main.push_back(dataManager.GetCodePointer(code));
......
This diff is collapsed.
...@@ -119,7 +119,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) { ...@@ -119,7 +119,7 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
cscg.info.draw_count = _wtoi(mainGame->ebDrawCount->getText()); cscg.info.draw_count = _wtoi(mainGame->ebDrawCount->getText());
cscg.info.time_limit = _wtoi(mainGame->ebTimeLimit->getText()); cscg.info.time_limit = _wtoi(mainGame->ebTimeLimit->getText());
cscg.info.lflist = mainGame->cbLFlist->getItemData(mainGame->cbLFlist->getSelected()); cscg.info.lflist = mainGame->cbLFlist->getItemData(mainGame->cbLFlist->getSelected());
cscg.info.enable_priority = mainGame->chkEnablePriority->isChecked(); cscg.info.duel_rule = mainGame->cbDuelRule->getSelected();
cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked(); cscg.info.no_check_deck = mainGame->chkNoCheckDeck->isChecked();
cscg.info.no_shuffle_deck = mainGame->chkNoShuffleDeck->isChecked(); cscg.info.no_shuffle_deck = mainGame->chkNoShuffleDeck->isChecked();
SendPacketToServer(CTOS_CREATE_GAME, cscg); SendPacketToServer(CTOS_CREATE_GAME, cscg);
...@@ -329,8 +329,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -329,8 +329,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
str.append(msgbuf); str.append(msgbuf);
myswprintf(msgbuf, L"%ls%d\n", dataManager.GetSysString(1233), pkt->info.draw_count); myswprintf(msgbuf, L"%ls%d\n", dataManager.GetSysString(1233), pkt->info.draw_count);
str.append(msgbuf); str.append(msgbuf);
if(pkt->info.enable_priority) { if(pkt->info.duel_rule != 2) {
myswprintf(msgbuf, L"*%ls\n", dataManager.GetSysString(1236)); myswprintf(msgbuf, L"*%ls\n", dataManager.GetSysString(1260 + pkt->info.duel_rule));
str.append(msgbuf); str.append(msgbuf);
} }
if(pkt->info.no_check_deck) { if(pkt->info.no_check_deck) {
...@@ -1296,40 +1296,42 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1296,40 +1296,42 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) { if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) {
unsigned int filter; unsigned int filter;
if (mainGame->dField.selectable_field & 0x1f) { if (mainGame->dField.selectable_field & 0x7f) {
respbuf[0] = mainGame->dInfo.isFirst ? 0 : 1; respbuf[0] = mainGame->LocalPlayer(0);
respbuf[1] = 0x4; respbuf[1] = LOCATION_MZONE;
filter = mainGame->dField.selectable_field & 0x1f; filter = mainGame->dField.selectable_field & 0x7f;
} else if (mainGame->dField.selectable_field & 0x1f00) { } else if (mainGame->dField.selectable_field & 0x1f00) {
respbuf[0] = mainGame->dInfo.isFirst ? 0 : 1; respbuf[0] = mainGame->LocalPlayer(0);
respbuf[1] = 0x8; respbuf[1] = LOCATION_SZONE;
filter = (mainGame->dField.selectable_field >> 8) & 0x1f; filter = (mainGame->dField.selectable_field >> 8) & 0x1f;
} else if (mainGame->dField.selectable_field & 0xc000) { } else if (mainGame->dField.selectable_field & 0xc000) {
respbuf[0] = mainGame->dInfo.isFirst ? 0 : 1; respbuf[0] = mainGame->LocalPlayer(0);
respbuf[1] = 0x8; respbuf[1] = LOCATION_SZONE;
filter = (mainGame->dField.selectable_field >> 14) & 0x3; filter = (mainGame->dField.selectable_field >> 14) & 0x3;
pzone = 1; pzone = 1;
} else if (mainGame->dField.selectable_field & 0x1f0000) { } else if (mainGame->dField.selectable_field & 0x7f0000) {
respbuf[0] = mainGame->dInfo.isFirst ? 1 : 0; respbuf[0] = mainGame->LocalPlayer(1);
respbuf[1] = 0x4; respbuf[1] = LOCATION_MZONE;
filter = (mainGame->dField.selectable_field >> 16) & 0x1f; filter = (mainGame->dField.selectable_field >> 16) & 0x7f;
} else if (mainGame->dField.selectable_field & 0x1f000000) { } else if (mainGame->dField.selectable_field & 0x1f000000) {
respbuf[0] = mainGame->dInfo.isFirst ? 1 : 0; respbuf[0] = mainGame->LocalPlayer(1);
respbuf[1] = 0x8; respbuf[1] = LOCATION_SZONE;
filter = (mainGame->dField.selectable_field >> 24) & 0x1f; filter = (mainGame->dField.selectable_field >> 24) & 0x1f;
} else { } else {
respbuf[0] = mainGame->dInfo.isFirst ? 1 : 0; respbuf[0] = mainGame->LocalPlayer(1);
respbuf[1] = 0x8; respbuf[1] = LOCATION_SZONE;
filter = (mainGame->dField.selectable_field >> 30) & 0x3; filter = (mainGame->dField.selectable_field >> 30) & 0x3;
pzone = 1; pzone = 1;
} }
if(!pzone) { if(!pzone) {
if(mainGame->chkRandomPos->isChecked()) { if(mainGame->chkRandomPos->isChecked()) {
respbuf[2] = rnd.real() * 5; do {
while(!(filter & (1 << respbuf[2]))) respbuf[2] = rnd.real() * 7;
respbuf[2] = rnd.real() * 5; } while(!(filter & (1 << respbuf[2])));
} else { } else {
if (filter & 0x4) respbuf[2] = 2; if (filter & 0x40) respbuf[2] = 6;
else if (filter & 0x20) respbuf[2] = 5;
else if (filter & 0x4) respbuf[2] = 2;
else if (filter & 0x2) respbuf[2] = 1; else if (filter & 0x2) respbuf[2] = 1;
else if (filter & 0x8) respbuf[2] = 3; else if (filter & 0x8) respbuf[2] = 3;
else if (filter & 0x1) respbuf[2] = 0; else if (filter & 0x1) respbuf[2] = 0;
...@@ -1771,7 +1773,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1771,7 +1773,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
(*cit)->location = LOCATION_GRAVE; (*cit)->location = LOCATION_GRAVE;
int m = 0; int m = 0;
for (auto cit = mainGame->dField.deck[player].begin(); cit != mainGame->dField.deck[player].end(); ) { for (auto cit = mainGame->dField.deck[player].begin(); cit != mainGame->dField.deck[player].end(); ) {
if ((*cit)->type & 0x802040) { if ((*cit)->type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) {
(*cit)->position = POS_FACEDOWN; (*cit)->position = POS_FACEDOWN;
mainGame->dField.AddCard(*cit, player, LOCATION_EXTRA, 0); mainGame->dField.AddCard(*cit, player, LOCATION_EXTRA, 0);
cit = mainGame->dField.deck[player].erase(cit); cit = mainGame->dField.deck[player].erase(cit);
...@@ -1791,7 +1793,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1791,7 +1793,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
int m = 0; int m = 0;
for (auto cit = mainGame->dField.deck[player].begin(); cit != mainGame->dField.deck[player].end(); ) { for (auto cit = mainGame->dField.deck[player].begin(); cit != mainGame->dField.deck[player].end(); ) {
ClientCard* pcard = *cit; ClientCard* pcard = *cit;
if (pcard->type & 0x802040) { if (pcard->type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) {
pcard->position = POS_FACEDOWN; pcard->position = POS_FACEDOWN;
mainGame->dField.AddCard(pcard, player, LOCATION_EXTRA, 0); mainGame->dField.AddCard(pcard, player, LOCATION_EXTRA, 0);
cit = mainGame->dField.deck[player].erase(cit); cit = mainGame->dField.deck[player].erase(cit);
...@@ -3441,7 +3443,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void * arg) { ...@@ -3441,7 +3443,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void * arg) {
hoststr.append(dataManager.GetSysString(pHP->host.mode + 1244)); hoststr.append(dataManager.GetSysString(pHP->host.mode + 1244));
hoststr.append(L"]["); hoststr.append(L"][");
if(pHP->host.draw_count == 1 && pHP->host.start_hand == 5 && pHP->host.start_lp == 8000 if(pHP->host.draw_count == 1 && pHP->host.start_hand == 5 && pHP->host.start_lp == 8000
&& !pHP->host.no_check_deck && !pHP->host.no_shuffle_deck && ! pHP->host.enable_priority) && !pHP->host.no_check_deck && !pHP->host.no_shuffle_deck && pHP->host.duel_rule == 2)
hoststr.append(dataManager.GetSysString(1280)); hoststr.append(dataManager.GetSysString(1280));
else hoststr.append(dataManager.GetSysString(1281)); else hoststr.append(dataManager.GetSysString(1281));
hoststr.append(L"]"); hoststr.append(L"]");
......
This diff is collapsed.
...@@ -134,7 +134,13 @@ bool Game::Initialize() { ...@@ -134,7 +134,13 @@ bool Game::Initialize() {
ebTimeLimit = env->addEditBox(strbuf, rect<s32>(140, 115, 220, 140), true, wCreateHost); ebTimeLimit = env->addEditBox(strbuf, rect<s32>(140, 115, 220, 140), true, wCreateHost);
ebTimeLimit->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebTimeLimit->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1228), rect<s32>(20, 150, 320, 170), false, false, wCreateHost); env->addStaticText(dataManager.GetSysString(1228), rect<s32>(20, 150, 320, 170), false, false, wCreateHost);
chkEnablePriority = env->addCheckBox(false, rect<s32>(20, 180, 360, 200), wCreateHost, -1, dataManager.GetSysString(1236)); env->addStaticText(dataManager.GetSysString(1236), rect<s32>(20, 180, 220, 200), false, false, wCreateHost);
cbDuelRule = env->addComboBox(rect<s32>(140, 175, 300, 200), wCreateHost);
cbDuelRule->addItem(dataManager.GetSysString(1260));
cbDuelRule->addItem(dataManager.GetSysString(1261));
cbDuelRule->addItem(dataManager.GetSysString(1262));
cbDuelRule->addItem(dataManager.GetSysString(1263));
cbDuelRule->setSelected(2);
chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 210, 170, 230), wCreateHost, -1, dataManager.GetSysString(1229)); chkNoCheckDeck = env->addCheckBox(false, rect<s32>(20, 210, 170, 230), wCreateHost, -1, dataManager.GetSysString(1229));
chkNoShuffleDeck = env->addCheckBox(false, rect<s32>(180, 210, 360, 230), wCreateHost, -1, dataManager.GetSysString(1230)); chkNoShuffleDeck = env->addCheckBox(false, rect<s32>(180, 210, 360, 230), wCreateHost, -1, dataManager.GetSysString(1230));
env->addStaticText(dataManager.GetSysString(1231), rect<s32>(20, 240, 320, 260), false, false, wCreateHost); env->addStaticText(dataManager.GetSysString(1231), rect<s32>(20, 240, 320, 260), false, false, wCreateHost);
...@@ -434,7 +440,7 @@ bool Game::Initialize() { ...@@ -434,7 +440,7 @@ bool Game::Initialize() {
cbCardType->addItem(dataManager.GetSysString(1312)); cbCardType->addItem(dataManager.GetSysString(1312));
cbCardType->addItem(dataManager.GetSysString(1313)); cbCardType->addItem(dataManager.GetSysString(1313));
cbCardType->addItem(dataManager.GetSysString(1314)); cbCardType->addItem(dataManager.GetSysString(1314));
cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 200, 20 + 25 / 6), wFilter, -1); cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 200, 20 + 25 / 6), wFilter, COMBOBOX_SECONDTYPE);
cbCardType2->setMaxSelectionRows(10); cbCardType2->setMaxSelectionRows(10);
cbCardType2->addItem(dataManager.GetSysString(1310), 0); cbCardType2->addItem(dataManager.GetSysString(1310), 0);
env->addStaticText(dataManager.GetSysString(1315), rect<s32>(205, 2 + 25 / 6, 280, 22 + 25 / 6), false, false, wFilter); env->addStaticText(dataManager.GetSysString(1315), rect<s32>(205, 2 + 25 / 6, 280, 22 + 25 / 6), false, false, wFilter);
...@@ -1019,19 +1025,29 @@ void Game::ShowCardInfo(int code) { ...@@ -1019,19 +1025,29 @@ void Game::ShowCardInfo(int code) {
if(cd.type & TYPE_MONSTER) { if(cd.type & TYPE_MONSTER) {
myswprintf(formatBuffer, L"[%ls] %ls/%ls", dataManager.FormatType(cd.type), dataManager.FormatRace(cd.race), dataManager.FormatAttribute(cd.attribute)); myswprintf(formatBuffer, L"[%ls] %ls/%ls", dataManager.FormatType(cd.type), dataManager.FormatRace(cd.race), dataManager.FormatAttribute(cd.attribute));
stInfo->setText(formatBuffer); stInfo->setText(formatBuffer);
int form = 0x2605; if(!(cd.type & TYPE_LINK)) {
if(cd.type & TYPE_XYZ) ++form; int form = 0x2605;
myswprintf(formatBuffer, L"[%c%d] ", form, cd.level); if(cd.type & TYPE_XYZ) ++form;
wchar_t adBuffer[16]; myswprintf(formatBuffer, L"[%c%d] ", form, cd.level);
if(cd.attack < 0 && cd.defense < 0) wchar_t adBuffer[16];
myswprintf(adBuffer, L"?/?"); if(cd.attack < 0 && cd.defense < 0)
else if(cd.attack < 0) myswprintf(adBuffer, L"?/?");
myswprintf(adBuffer, L"?/%d", cd.defense); else if(cd.attack < 0)
else if(cd.defense < 0) myswprintf(adBuffer, L"?/%d", cd.defense);
myswprintf(adBuffer, L"%d/?", cd.attack); else if(cd.defense < 0)
else myswprintf(adBuffer, L"%d/?", cd.attack);
myswprintf(adBuffer, L"%d/%d", cd.attack, cd.defense); else
wcscat(formatBuffer, adBuffer); myswprintf(adBuffer, L"%d/%d", cd.attack, cd.defense);
wcscat(formatBuffer, adBuffer);
} else {
myswprintf(formatBuffer, L"[LINK-%d] ", cd.level);
wchar_t adBuffer[16];
if(cd.attack < 0)
myswprintf(adBuffer, L"?/-");
else
myswprintf(adBuffer, L"%d/-", cd.attack);
wcscat(formatBuffer, adBuffer);
}
if(cd.type & TYPE_PENDULUM) { if(cd.type & TYPE_PENDULUM) {
wchar_t scaleBuffer[16]; wchar_t scaleBuffer[16];
myswprintf(scaleBuffer, L" %d/%d", cd.lscale, cd.rscale); myswprintf(scaleBuffer, L" %d/%d", cd.lscale, cd.rscale);
......
...@@ -91,6 +91,7 @@ public: ...@@ -91,6 +91,7 @@ public:
void DrawCards(); void DrawCards();
void DrawCard(ClientCard* pcard); void DrawCard(ClientCard* pcard);
void DrawMisc(); void DrawMisc();
void DrawStatus(ClientCard* pcard, int x1, int y1, int x2, int y2);
void DrawGUI(); void DrawGUI();
void DrawSpec(); void DrawSpec();
void ShowElement(irr::gui::IGUIElement* element, int autoframe = 0); void ShowElement(irr::gui::IGUIElement* element, int autoframe = 0);
...@@ -235,7 +236,7 @@ public: ...@@ -235,7 +236,7 @@ public:
irr::gui::IGUIEditBox* ebDrawCount; irr::gui::IGUIEditBox* ebDrawCount;
irr::gui::IGUIEditBox* ebServerName; irr::gui::IGUIEditBox* ebServerName;
irr::gui::IGUIEditBox* ebServerPass; irr::gui::IGUIEditBox* ebServerPass;
irr::gui::IGUICheckBox* chkEnablePriority; irr::gui::IGUIComboBox* cbDuelRule;
irr::gui::IGUICheckBox* chkNoCheckDeck; irr::gui::IGUICheckBox* chkNoCheckDeck;
irr::gui::IGUICheckBox* chkNoShuffleDeck; irr::gui::IGUICheckBox* chkNoShuffleDeck;
irr::gui::IGUIButton* btnHostConfirm; irr::gui::IGUIButton* btnHostConfirm;
...@@ -518,11 +519,12 @@ extern Game* mainGame; ...@@ -518,11 +519,12 @@ extern Game* mainGame;
#define BUTTON_SIDE_OK 309 #define BUTTON_SIDE_OK 309
#define BUTTON_SHUFFLE_DECK 310 #define BUTTON_SHUFFLE_DECK 310
#define COMBOBOX_MAINTYPE 311 #define COMBOBOX_MAINTYPE 311
#define BUTTON_EFFECT_FILTER 312 #define COMBOBOX_SECONDTYPE 312
#define BUTTON_START_FILTER 313 #define BUTTON_EFFECT_FILTER 313
#define SCROLL_FILTER 314 #define BUTTON_START_FILTER 314
#define EDITBOX_KEYWORD 315 #define SCROLL_FILTER 315
#define BUTTON_CLEAR_FILTER 316 #define EDITBOX_KEYWORD 316
#define BUTTON_CLEAR_FILTER 317
#define BUTTON_REPLAY_START 320 #define BUTTON_REPLAY_START 320
#define BUTTON_REPLAY_PAUSE 321 #define BUTTON_REPLAY_PAUSE 321
#define BUTTON_REPLAY_STEP 322 #define BUTTON_REPLAY_STEP 322
......
This diff is collapsed.
...@@ -19,12 +19,18 @@ public: ...@@ -19,12 +19,18 @@ public:
S3DVertex vFieldSpell[4]; S3DVertex vFieldSpell[4];
S3DVertex vFieldSpell1[4]; S3DVertex vFieldSpell1[4];
S3DVertex vFieldSpell2[4]; S3DVertex vFieldSpell2[4];
S3DVertex vBackLine[76]; //S3DVertex vBackLine[76];
S3DVertex vFields[140]; S3DVertex vFieldDeck[2][4];
S3DVertex vFieldGrave[2][4];
S3DVertex vFieldExtra[2][4];
S3DVertex vFieldRemove[2][4];
S3DVertex vFieldMzone[2][7][4];
S3DVertex vFieldSzone[2][8][4];
irr::core::vector3df vFieldContiAct[4];
S3DVertex vArrow[40]; S3DVertex vArrow[40];
SColor c2d[4]; SColor c2d[4];
u16 iRectangle[6]; u16 iRectangle[6];
u16 iBackLine[116]; //u16 iBackLine[116];
u16 iArrow[40]; u16 iArrow[40];
irr::video::SMaterial mCard; irr::video::SMaterial mCard;
irr::video::SMaterial mTexture; irr::video::SMaterial mTexture;
......
...@@ -15,7 +15,7 @@ struct HostInfo { ...@@ -15,7 +15,7 @@ struct HostInfo {
unsigned int lflist; unsigned int lflist;
unsigned char rule; unsigned char rule;
unsigned char mode; unsigned char mode;
bool enable_priority; unsigned char duel_rule;
bool no_check_deck; bool no_check_deck;
bool no_shuffle_deck; bool no_shuffle_deck;
unsigned int start_lp; unsigned int start_lp;
......
...@@ -811,7 +811,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -811,7 +811,7 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
return true; return true;
} }
void ReplayMode::ReplayRefresh(int flag) { void ReplayMode::ReplayRefresh(int flag) {
unsigned char queryBuffer[0x2000]; unsigned char queryBuffer[0x4000];
/*int len = */query_field_card(pduel, 0, LOCATION_MZONE, flag, queryBuffer, 0); /*int len = */query_field_card(pduel, 0, LOCATION_MZONE, flag, queryBuffer, 0);
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(0), LOCATION_MZONE, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(0), LOCATION_MZONE, (char*)queryBuffer);
/*len = */query_field_card(pduel, 1, LOCATION_MZONE, flag, queryBuffer, 0); /*len = */query_field_card(pduel, 1, LOCATION_MZONE, flag, queryBuffer, 0);
...@@ -846,7 +846,7 @@ void ReplayMode::ReplayRefreshExtra(int player, int flag) { ...@@ -846,7 +846,7 @@ void ReplayMode::ReplayRefreshExtra(int player, int flag) {
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(player), LOCATION_EXTRA, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(player), LOCATION_EXTRA, (char*)queryBuffer);
} }
void ReplayMode::ReplayRefreshSingle(int player, int location, int sequence, int flag) { void ReplayMode::ReplayRefreshSingle(int player, int location, int sequence, int flag) {
unsigned char queryBuffer[0x2000]; unsigned char queryBuffer[0x4000];
/*int len = */query_card(pduel, player, location, sequence, flag, queryBuffer, 0); /*int len = */query_card(pduel, player, location, sequence, flag, queryBuffer, 0);
mainGame->dField.UpdateCard(mainGame->LocalPlayer(player), location, sequence, (char*)queryBuffer); mainGame->dField.UpdateCard(mainGame->LocalPlayer(player), location, sequence, (char*)queryBuffer);
} }
......
...@@ -37,12 +37,12 @@ public: ...@@ -37,12 +37,12 @@ public:
static void Undo(); static void Undo();
static bool ReplayAnalyze(char* msg, unsigned int len); static bool ReplayAnalyze(char* msg, unsigned int len);
static void ReplayRefresh(int flag = 0x781fff); static void ReplayRefresh(int flag = 0xf81fff);
static void ReplayRefreshHand(int player, int flag = 0x781fff); static void ReplayRefreshHand(int player, int flag = 0x781fff);
static void ReplayRefreshGrave(int player, int flag = 0x181fff); static void ReplayRefreshGrave(int player, int flag = 0x181fff);
static void ReplayRefreshDeck(int player, int flag = 0x181fff); static void ReplayRefreshDeck(int player, int flag = 0x181fff);
static void ReplayRefreshExtra(int player, int flag = 0x181fff); static void ReplayRefreshExtra(int player, int flag = 0x181fff);
static void ReplayRefreshSingle(int player, int location, int sequence, int flag = 0x781fff); static void ReplayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
}; };
......
...@@ -412,9 +412,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -412,9 +412,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
pduel = create_duel(rnd.rand()); pduel = create_duel(rnd.rand());
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count);
int opt = 0; int opt = ((int)host_info.duel_rule + 1) << 16;
if(host_info.enable_priority)
opt |= DUEL_OBSOLETE_RULING;
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
last_replay.WriteInt32(host_info.start_lp, false); last_replay.WriteInt32(host_info.start_lp, false);
......
...@@ -31,12 +31,12 @@ public: ...@@ -31,12 +31,12 @@ public:
void DuelEndProc(); void DuelEndProc();
void WaitforResponse(int playerid); void WaitforResponse(int playerid);
void RefreshMzone(int player, int flag = 0x81fff, int use_cache = 1); void RefreshMzone(int player, int flag = 0x881fff, int use_cache = 1);
void RefreshSzone(int player, int flag = 0x681fff, int use_cache = 1); void RefreshSzone(int player, int flag = 0x681fff, int use_cache = 1);
void RefreshHand(int player, int flag = 0x781fff, int use_cache = 1); void RefreshHand(int player, int flag = 0x781fff, int use_cache = 1);
void RefreshGrave(int player, int flag = 0x81fff, int use_cache = 1); void RefreshGrave(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1); void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSingle(int player, int location, int sequence, int flag = 0x781fff); void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
static void SingleTimer(evutil_socket_t fd, short events, void* arg); static void SingleTimer(evutil_socket_t fd, short events, void* arg);
......
...@@ -770,7 +770,7 @@ void SingleMode::SinglePlayRefreshSingle(int player, int location, int sequence, ...@@ -770,7 +770,7 @@ void SingleMode::SinglePlayRefreshSingle(int player, int location, int sequence,
} }
void SingleMode::SinglePlayReload() { void SingleMode::SinglePlayReload() {
unsigned char queryBuffer[0x2000]; unsigned char queryBuffer[0x2000];
unsigned int flag = 0x7fdfff; unsigned int flag = 0xffdfff;
/*int len = */query_field_card(pduel, 0, LOCATION_MZONE, flag, queryBuffer, 0); /*int len = */query_field_card(pduel, 0, LOCATION_MZONE, flag, queryBuffer, 0);
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(0), LOCATION_MZONE, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(0), LOCATION_MZONE, (char*)queryBuffer);
/*len = */query_field_card(pduel, 1, LOCATION_MZONE, flag, queryBuffer, 0); /*len = */query_field_card(pduel, 1, LOCATION_MZONE, flag, queryBuffer, 0);
......
...@@ -21,12 +21,12 @@ public: ...@@ -21,12 +21,12 @@ public:
static int SinglePlayThread(void* param); static int SinglePlayThread(void* param);
static bool SinglePlayAnalyze(char* msg, unsigned int len); static bool SinglePlayAnalyze(char* msg, unsigned int len);
static void SinglePlayRefresh(int flag = 0x781fff); static void SinglePlayRefresh(int flag = 0xf81fff);
static void SinglePlayRefreshHand(int player, int flag = 0x781fff); static void SinglePlayRefreshHand(int player, int flag = 0x781fff);
static void SinglePlayRefreshGrave(int player, int flag = 0x181fff); static void SinglePlayRefreshGrave(int player, int flag = 0x181fff);
static void SinglePlayRefreshDeck(int player, int flag = 0x181fff); static void SinglePlayRefreshDeck(int player, int flag = 0x181fff);
static void SinglePlayRefreshExtra(int player, int flag = 0x181fff); static void SinglePlayRefreshExtra(int player, int flag = 0x181fff);
static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0x781fff); static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static void SinglePlayReload(); static void SinglePlayReload();
static byte* ScriptReader(const char* script_name, int* slen); static byte* ScriptReader(const char* script_name, int* slen);
......
...@@ -382,9 +382,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -382,9 +382,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
pduel = create_duel(rnd.rand()); pduel = create_duel(rnd.rand());
set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 0, host_info.start_lp, host_info.start_hand, host_info.draw_count);
set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count); set_player_info(pduel, 1, host_info.start_lp, host_info.start_hand, host_info.draw_count);
int opt = 0; int opt = ((int)host_info.duel_rule + 1) << 16;
if(host_info.enable_priority)
opt |= DUEL_OBSOLETE_RULING;
if(host_info.no_shuffle_deck) if(host_info.no_shuffle_deck)
opt |= DUEL_PSEUDO_SHUFFLE; opt |= DUEL_PSEUDO_SHUFFLE;
opt |= DUEL_TAG_MODE; opt |= DUEL_TAG_MODE;
......
...@@ -31,12 +31,12 @@ public: ...@@ -31,12 +31,12 @@ public:
void DuelEndProc(); void DuelEndProc();
void WaitforResponse(int playerid); void WaitforResponse(int playerid);
void RefreshMzone(int player, int flag = 0x81fff, int use_cache = 1); void RefreshMzone(int player, int flag = 0x881fff, int use_cache = 1);
void RefreshSzone(int player, int flag = 0x681fff, int use_cache = 1); void RefreshSzone(int player, int flag = 0x681fff, int use_cache = 1);
void RefreshHand(int player, int flag = 0x781fff, int use_cache = 1); void RefreshHand(int player, int flag = 0x781fff, int use_cache = 1);
void RefreshGrave(int player, int flag = 0x81fff, int use_cache = 1); void RefreshGrave(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1); void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSingle(int player, int location, int sequence, int flag = 0x781fff); void RefreshSingle(int player, int location, int sequence, int flag = 0xf81fff);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
static void TagTimer(evutil_socket_t fd, short events, void* arg); static void TagTimer(evutil_socket_t fd, short events, void* arg);
......
This diff is collapsed.
Subproject commit 2182420064fd752750c282b64217183563b13453 Subproject commit f7212e86adc50d53a854691bbcb61ae82276202a
Subproject commit 5bac33f528c7838f1909fd4e460d1b9d5308bdf8 Subproject commit 937e833a299591a46c339695a4c62e0b2af1694a
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
!system 1041 幻神兽 !system 1041 幻神兽
!system 1042 创造神 !system 1042 创造神
!system 1043 幻龙 !system 1043 幻龙
!system 1044 电子 !system 1044 电子界
!system 1050 怪兽 !system 1050 怪兽
!system 1051 魔法 !system 1051 魔法
!system 1052 陷阱 !system 1052 陷阱
...@@ -263,7 +263,7 @@ ...@@ -263,7 +263,7 @@
!system 1233 每回合抽卡: !system 1233 每回合抽卡:
!system 1234 主机名称: !system 1234 主机名称:
!system 1235 主机密码: !system 1235 主机密码:
!system 1236 旧规则(先攻抽卡、起动效果优先权等) !system 1236 规则:
!system 1237 每回合时间: !system 1237 每回合时间:
!system 1240 OCG !system 1240 OCG
!system 1241 TCG !system 1241 TCG
...@@ -278,6 +278,10 @@ ...@@ -278,6 +278,10 @@
!system 1253 当前观战人数: !system 1253 当前观战人数:
!system 1254 卡组选择: !system 1254 卡组选择:
!system 1255 准备完毕! !system 1255 准备完毕!
!system 1260 大师规则
!system 1261 大师规则2
!system 1262 大师规则3
!system 1263 新大师规则
!system 1270 卡片信息 !system 1270 卡片信息
!system 1271 消息记录 !system 1271 消息记录
!system 1272 清除记录 !system 1272 清除记录
......
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