Commit 134528e1 authored by wind2009's avatar wind2009

Merge remote-tracking branch 'upstream/master' into server

parents f1ce2613 377824c5
......@@ -31,8 +31,8 @@ ClientCard::~ClientCard() {
}
overlayed.clear();
}
void ClientCard::SetCode(int x) {
if((location == LOCATION_HAND) && (code != (unsigned int)x)) {
void ClientCard::SetCode(unsigned int x) {
if((location == LOCATION_HAND) && (code != x)) {
code = x;
mainGame->dField.MoveCard(this, 5);
} else
......@@ -175,13 +175,13 @@ void ClientCard::UpdateInfo(unsigned char* buf) {
}
}
void ClientCard::ClearTarget() {
for(auto cit = cardTarget.begin(); cit != cardTarget.end(); ++cit) {
(*cit)->is_showtarget = false;
(*cit)->ownerTarget.erase(this);
for (auto& pcard : cardTarget) {
pcard->is_showtarget = false;
pcard->ownerTarget.erase(this);
}
for(auto cit = ownerTarget.begin(); cit != ownerTarget.end(); ++cit) {
(*cit)->is_showtarget = false;
(*cit)->cardTarget.erase(this);
for (auto& pcard : ownerTarget) {
pcard->is_showtarget = false;
pcard->cardTarget.erase(this);
}
cardTarget.clear();
ownerTarget.clear();
......@@ -220,27 +220,29 @@ bool ClientCard::client_card_sort(ClientCard* c1, ClientCard* c2) {
return cp1 < cp2;
if(c1->location != c2->location)
return c1->location < c2->location;
if (c1->location & LOCATION_OVERLAY) {
if (c1->location == LOCATION_OVERLAY) {
if (c1->overlayTarget != c2->overlayTarget)
return c1->overlayTarget->sequence < c2->overlayTarget->sequence;
else
return c1->sequence < c2->sequence;
}
else {
if(c1->location & (LOCATION_DECK | LOCATION_GRAVE | LOCATION_REMOVED | LOCATION_EXTRA)) {
auto it1 = std::find_if(mainGame->dField.chains.rbegin(), mainGame->dField.chains.rend(), [c1](const ChainInfo& ch) {
return c1 == ch.chain_card || ch.target.find(c1) != ch.target.end();
});
auto it2 = std::find_if(mainGame->dField.chains.rbegin(), mainGame->dField.chains.rend(), [c2](const ChainInfo& ch) {
return c2 == ch.chain_card || ch.target.find(c2) != ch.target.end();
});
if(it1 != mainGame->dField.chains.rend() || it2 != mainGame->dField.chains.rend()) {
return it1 < it2;
}
return c1->sequence > c2->sequence;
else if (c1->location == LOCATION_DECK) {
return c1->sequence > c2->sequence;
}
else if (c1->location & (LOCATION_GRAVE | LOCATION_REMOVED | LOCATION_EXTRA)) {
auto it1 = std::find_if(mainGame->dField.chains.rbegin(), mainGame->dField.chains.rend(), [c1](const ChainInfo& ch) {
return c1 == ch.chain_card || ch.target.find(c1) != ch.target.end();
});
auto it2 = std::find_if(mainGame->dField.chains.rbegin(), mainGame->dField.chains.rend(), [c2](const ChainInfo& ch) {
return c2 == ch.chain_card || ch.target.find(c2) != ch.target.end();
});
if (it1 != mainGame->dField.chains.rend() || it2 != mainGame->dField.chains.rend()) {
return it1 < it2;
}
else
return c1->sequence < c2->sequence;
return c1->sequence > c2->sequence;
}
else {
return c1->sequence < c2->sequence;
}
}
}
......@@ -76,7 +76,7 @@ public:
ClientCard() = default;
~ClientCard();
void SetCode(int x);
void SetCode(unsigned int x);
void UpdateInfo(unsigned char* buf);
void ClearTarget();
void ClearData();
......
......@@ -127,7 +127,7 @@ void ClientField::Initial(int player, int deckc, int extrac) {
deck[player].push_back(pcard);
pcard->owner = player;
pcard->controler = player;
pcard->location = 0x1;
pcard->location = LOCATION_DECK;
pcard->sequence = i;
pcard->position = POS_FACEDOWN_DEFENSE;
GetCardLocation(pcard, &pcard->curPos, &pcard->curRot, true);
......@@ -137,7 +137,7 @@ void ClientField::Initial(int player, int deckc, int extrac) {
extra[player].push_back(pcard);
pcard->owner = player;
pcard->controler = player;
pcard->location = 0x40;
pcard->location = LOCATION_EXTRA;
pcard->sequence = i;
pcard->position = POS_FACEDOWN_DEFENSE;
GetCardLocation(pcard, &pcard->curPos, &pcard->curRot, true);
......@@ -196,15 +196,15 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
deck[controler].push_back(pcard);
pcard->sequence = (unsigned char)(deck[controler].size() - 1);
} else {
deck[controler].push_back(0);
for(int i = deck[controler].size() - 1; i > 0; --i) {
deck[controler][i] = deck[controler][i - 1];
deck[controler][i]->sequence++;
}
deck[controler][0] = pcard;
for (auto& pcard : deck[controler])
pcard->sequence++;
deck[controler].insert(deck[controler].begin(), pcard);
pcard->sequence = 0;
}
pcard->is_reversed = false;
pcard->ClearData();
pcard->ClearTarget();
SetShowMark(pcard, false);
break;
}
case LOCATION_HAND: {
......@@ -235,15 +235,13 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
extra[controler].push_back(pcard);
pcard->sequence = (unsigned char)(extra[controler].size() - 1);
} else {
extra[controler].push_back(0);
int p = extra[controler].size() - extra_p_count[controler] - 1;
for(int i = extra[controler].size() - 1; i > p; --i) {
extra[controler][i] = extra[controler][i - 1];
extra[controler][i]->sequence++;
extra[controler][i]->curPos += irr::core::vector3df(0, 0, 0.01f);
extra[controler][i]->mTransform.setTranslation(extra[controler][i]->curPos);
}
extra[controler][p] = pcard;
extra[controler].insert(extra[controler].begin() + p, pcard);
pcard->sequence = p;
}
if (pcard->position & POS_FACEUP)
......@@ -253,69 +251,54 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
}
ClientCard* ClientField::RemoveCard(int controler, int location, int sequence) {
ClientCard* pcard = 0;
ClientCard* pcard = nullptr;
auto erase_card = [](std::vector<ClientCard*>& lst, int seq) {
for (int i = seq; i < (int)lst.size() - 1; ++i) {
lst[i] = lst[i + 1];
lst[i]->sequence--;
lst[i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
lst[i]->mTransform.setTranslation(lst[i]->curPos);
}
lst.pop_back();
};
switch (location) {
case LOCATION_DECK: {
pcard = deck[controler][sequence];
for (size_t i = sequence; i < deck[controler].size() - 1; ++i) {
deck[controler][i] = deck[controler][i + 1];
deck[controler][i]->sequence--;
deck[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
deck[controler][i]->mTransform.setTranslation(deck[controler][i]->curPos);
}
deck[controler].erase(deck[controler].end() - 1);
erase_card(deck[controler], sequence);
break;
}
case LOCATION_HAND: {
pcard = hand[controler][sequence];
for (size_t i = sequence; i < hand[controler].size() - 1; ++i) {
for (int i = sequence; i < (int)hand[controler].size() - 1; ++i) {
hand[controler][i] = hand[controler][i + 1];
hand[controler][i]->sequence--;
}
hand[controler].erase(hand[controler].end() - 1);
hand[controler].pop_back();
break;
}
case LOCATION_MZONE: {
pcard = mzone[controler][sequence];
mzone[controler][sequence] = 0;
mzone[controler][sequence] = nullptr;
break;
}
case LOCATION_SZONE: {
pcard = szone[controler][sequence];
szone[controler][sequence] = 0;
szone[controler][sequence] = nullptr;
break;
}
case LOCATION_GRAVE: {
pcard = grave[controler][sequence];
for (size_t i = sequence; i < grave[controler].size() - 1; ++i) {
grave[controler][i] = grave[controler][i + 1];
grave[controler][i]->sequence--;
grave[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
grave[controler][i]->mTransform.setTranslation(grave[controler][i]->curPos);
}
grave[controler].erase(grave[controler].end() - 1);
erase_card(grave[controler], sequence);
break;
}
case LOCATION_REMOVED: {
pcard = remove[controler][sequence];
for (size_t i = sequence; i < remove[controler].size() - 1; ++i) {
remove[controler][i] = remove[controler][i + 1];
remove[controler][i]->sequence--;
remove[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
remove[controler][i]->mTransform.setTranslation(remove[controler][i]->curPos);
}
remove[controler].erase(remove[controler].end() - 1);
erase_card(remove[controler], sequence);
break;
}
case LOCATION_EXTRA: {
pcard = extra[controler][sequence];
for (size_t i = sequence; i < extra[controler].size() - 1; ++i) {
extra[controler][i] = extra[controler][i + 1];
extra[controler][i]->sequence--;
extra[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
extra[controler][i]->mTransform.setTranslation(extra[controler][i]->curPos);
}
extra[controler].erase(extra[controler].end() - 1);
erase_card(extra[controler], sequence);
if (pcard->position & POS_FACEUP)
extra_p_count[controler]--;
break;
......@@ -425,8 +408,8 @@ void ClientField::ClearChainSelect() {
void ClientField::ShowSelectCard(bool buttonok, bool chain) {
if(cant_check_grave) {
bool has_card_in_grave = false;
for(size_t i = 0; i < selectable_cards.size(); ++i) {
if(selectable_cards[i]->location == LOCATION_GRAVE) {
for (auto& pcard : selectable_cards) {
if (pcard->location == LOCATION_GRAVE) {
has_card_in_grave = true;
break;
}
......@@ -436,7 +419,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
}
int startpos;
size_t ct;
int ct;
if(selectable_cards.size() <= 5) {
startpos = 30 + 125 * (5 - selectable_cards.size()) / 2;
ct = selectable_cards.size();
......@@ -444,7 +427,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
startpos = 30;
ct = 5;
}
for(size_t i = 0; i < ct; ++i) {
for(int i = 0; i < ct; ++i) {
mainGame->stCardPos[i]->enableOverrideColor(false);
// image
if(selectable_cards[i]->code)
......@@ -528,7 +511,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
}
void ClientField::ShowChainCard() {
int startpos;
size_t ct;
int ct;
if(selectable_cards.size() <= 5) {
startpos = 30 + 125 * (5 - selectable_cards.size()) / 2;
ct = selectable_cards.size();
......@@ -536,7 +519,7 @@ void ClientField::ShowChainCard() {
startpos = 30;
ct = 5;
}
for(size_t i = 0; i < ct; ++i) {
for(int i = 0; i < ct; ++i) {
if(selectable_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardSelect[i], selectable_cards[i]->code));
else
......@@ -582,7 +565,7 @@ void ClientField::ShowChainCard() {
}
void ClientField::ShowLocationCard() {
int startpos;
size_t ct;
int ct;
if(display_cards.size() <= 5) {
startpos = 30 + 125 * (5 - display_cards.size()) / 2;
ct = display_cards.size();
......@@ -590,7 +573,7 @@ void ClientField::ShowLocationCard() {
startpos = 30;
ct = 5;
}
for(size_t i = 0; i < ct; ++i) {
for(int i = 0; i < ct; ++i) {
mainGame->stDisplayPos[i]->enableOverrideColor(false);
if(display_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardDisplay[i], display_cards[i]->code));
......@@ -1187,8 +1170,8 @@ bool ClientField::CheckSelectSum() {
(*sit)->is_selected = false;
selable.insert(*sit);
}
for(size_t i = 0; i < selected_cards.size(); ++i) {
if((int)i < must_select_count)
for(int i = 0; i < (int)selected_cards.size(); ++i) {
if(i < must_select_count)
selected_cards[i]->is_selectable = false;
else
selected_cards[i]->is_selectable = true;
......@@ -1274,7 +1257,7 @@ bool ClientField::CheckSelectTribute() {
(*sit)->is_selected = false;
selable.insert(*sit);
}
for(size_t i = 0; i < selected_cards.size(); ++i) {
for(int i = 0; i < (int)selected_cards.size(); ++i) {
selected_cards[i]->is_selectable = true;
selected_cards[i]->is_selected = true;
selable.erase(selected_cards[i]);
......
......@@ -17,6 +17,7 @@ namespace irr {
namespace ygo {
constexpr int MAX_STRING_ID = 0x7ff;
constexpr unsigned int MIN_CARD_ID = (unsigned int)(MAX_STRING_ID + 1) >> 4;
constexpr unsigned int MAX_CARD_ID = 0x0fffffffU;
using CardData = card_data;
struct CardDataC : card_data {
......
......@@ -177,7 +177,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(*dname == 0)
break;
int sel = -1;
for(size_t i = 0; i < mainGame->cbDBDecks->getItemCount(); ++i) {
for(int i = 0; i < (int)mainGame->cbDBDecks->getItemCount(); ++i) {
if(!std::wcscmp(dname, mainGame->cbDBDecks->getItem(i))) {
sel = i;
break;
......
......@@ -37,7 +37,7 @@ void DeckManager::LoadLFListSingle(const char* path) {
int count = -1;
if (sscanf(linebuf, "%d %d", &code, &count) != 2)
continue;
if (code <= 0 || code > 0xfffffff)
if (code <= 0 || code > MAX_CARD_ID)
continue;
if (count < 0 || count > 2)
continue;
......@@ -77,71 +77,75 @@ const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
return &lit->content;
return nullptr;
}
static int checkAvail(unsigned int ot, unsigned int avail) {
static unsigned int checkAvail(unsigned int ot, unsigned int avail) {
if((ot & avail) == avail)
return 0;
if((ot & AVAIL_OCG) && !(avail == AVAIL_OCG))
if((ot & AVAIL_OCG) && (avail != AVAIL_OCG))
return DECKERROR_OCGONLY;
if((ot & AVAIL_TCG) && !(avail == AVAIL_TCG))
if((ot & AVAIL_TCG) && (avail != AVAIL_TCG))
return DECKERROR_TCGONLY;
return DECKERROR_NOTAVAIL;
}
int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
unsigned int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
std::unordered_map<int, int> ccount;
auto list = GetLFListContent(lfhash);
if(!list)
return 0;
int dc = 0;
// rule
if(deck.main.size() < DECK_MIN_SIZE || deck.main.size() > DECK_MAX_SIZE)
return ((unsigned)DECKERROR_MAINCOUNT << 28) + deck.main.size();
return (DECKERROR_MAINCOUNT << 28) | (unsigned)deck.main.size();
if(deck.extra.size() > EXTRA_MAX_SIZE)
return ((unsigned)DECKERROR_EXTRACOUNT << 28) + deck.extra.size();
return (DECKERROR_EXTRACOUNT << 28) | (unsigned)deck.extra.size();
if(deck.side.size() > SIDE_MAX_SIZE)
return ((unsigned)DECKERROR_SIDECOUNT << 28) + deck.side.size();
if (rule < 0 || rule >= 6)
return (DECKERROR_SIDECOUNT << 28) | (unsigned)deck.side.size();
auto list = GetLFListContent(lfhash);
if (!list)
return 0;
const unsigned int rule_map[6] = { AVAIL_OCG, AVAIL_TCG, AVAIL_SC, AVAIL_CUSTOM, AVAIL_OCGTCG, 0 };
auto avail = rule_map[rule];
unsigned int avail = 0;
if (rule >= 0 && rule < (int)(sizeof rule_map / sizeof rule_map[0]))
avail = rule_map[rule];
for (auto& cit : deck.main) {
int gameruleDeckError = checkAvail(cit->second.ot, avail);
auto gameruleDeckError = checkAvail(cit->second.ot, avail);
if(gameruleDeckError)
return (gameruleDeckError << 28) + cit->first;
return (gameruleDeckError << 28) | cit->first;
if (cit->second.type & (TYPES_EXTRA_DECK | TYPE_TOKEN))
return (DECKERROR_EXTRACOUNT << 28);
return (DECKERROR_MAINCOUNT << 28);
int code = cit->second.alias ? cit->second.alias : cit->first;
ccount[code]++;
dc = ccount[code];
int dc = ccount[code];
if(dc > 3)
return (DECKERROR_CARDCOUNT << 28) + cit->first;
return (DECKERROR_CARDCOUNT << 28) | cit->first;
auto it = list->find(code);
if(it != list->end() && dc > it->second)
return (DECKERROR_LFLIST << 28) + cit->first;
return (DECKERROR_LFLIST << 28) | cit->first;
}
for (auto& cit : deck.extra) {
int gameruleDeckError = checkAvail(cit->second.ot, avail);
auto gameruleDeckError = checkAvail(cit->second.ot, avail);
if(gameruleDeckError)
return (gameruleDeckError << 28) + cit->first;
return (gameruleDeckError << 28) | cit->first;
if (!(cit->second.type & TYPES_EXTRA_DECK) || cit->second.type & TYPE_TOKEN)
return (DECKERROR_EXTRACOUNT << 28);
int code = cit->second.alias ? cit->second.alias : cit->first;
ccount[code]++;
dc = ccount[code];
int dc = ccount[code];
if(dc > 3)
return (DECKERROR_CARDCOUNT << 28) + cit->first;
return (DECKERROR_CARDCOUNT << 28) | cit->first;
auto it = list->find(code);
if(it != list->end() && dc > it->second)
return (DECKERROR_LFLIST << 28) + cit->first;
return (DECKERROR_LFLIST << 28) | cit->first;
}
for (auto& cit : deck.side) {
int gameruleDeckError = checkAvail(cit->second.ot, avail);
auto gameruleDeckError = checkAvail(cit->second.ot, avail);
if(gameruleDeckError)
return (gameruleDeckError << 28) + cit->first;
return (gameruleDeckError << 28) | cit->first;
if (cit->second.type & TYPE_TOKEN)
return (DECKERROR_SIDECOUNT << 28);
int code = cit->second.alias ? cit->second.alias : cit->first;
ccount[code]++;
dc = ccount[code];
int dc = ccount[code];
if(dc > 3)
return (DECKERROR_CARDCOUNT << 28) + cit->first;
return (DECKERROR_CARDCOUNT << 28) | cit->first;
auto it = list->find(code);
if(it != list->end() && dc > it->second)
return (DECKERROR_LFLIST << 28) + cit->first;
return (DECKERROR_LFLIST << 28) | cit->first;
}
return 0;
}
......@@ -165,11 +169,11 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
continue;
}
if (cd.type & TYPES_EXTRA_DECK) {
if ((int)deck.extra.size() < EXTRA_MAX_SIZE)
if (deck.extra.size() < EXTRA_MAX_SIZE)
deck.extra.push_back(dataManager.GetCodePointer(code));
}
else {
if ((int)deck.main.size() < DECK_MAX_SIZE)
if (deck.main.size() < DECK_MAX_SIZE)
deck.main.push_back(dataManager.GetCodePointer(code));
}
}
......
......@@ -65,7 +65,7 @@ public:
void LoadLFList();
const wchar_t* GetLFListName(int lfhash);
const std::unordered_map<int, int>* GetLFListContent(int lfhash);
int CheckDeck(Deck& deck, int lfhash, int rule);
unsigned int CheckDeck(Deck& deck, int lfhash, int rule);
int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_packlist = false);
int LoadDeck(Deck& deck, std::istringstream& deckStream, bool is_packlist = false);
bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec);
......
......@@ -1266,7 +1266,7 @@ void Game::DrawDeckBd() {
driver->draw2DRectangle(Resize(805, 160, 1020, 630), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(Resize(804, 159, 1020, 630));
}
for(size_t i = 0; i < 9 && i + scrFilter->getPos() < deckBuilder.results.size(); ++i) {
for(int i = 0; i < 9 && i + scrFilter->getPos() < (int)deckBuilder.results.size(); ++i) {
code_pointer ptr = deckBuilder.results[i + scrFilter->getPos()];
if(i >= 7)
{
......
......@@ -274,8 +274,8 @@ void DuelClient::HandleSTOCPacketLan(unsigned char* data, int len) {
}
case ERRMSG_DECKERROR: {
mainGame->gMutex.lock();
unsigned int code = pkt->code & 0xFFFFFFF;
int flag = pkt->code >> 28;
unsigned int code = pkt->code & MAX_CARD_ID;
unsigned int flag = pkt->code >> 28;
wchar_t msgbuf[256];
switch(flag)
{
......@@ -1565,7 +1565,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l = BufferIO::ReadUInt8(pbuf);
s = BufferIO::ReadUInt8(pbuf);
ss = BufferIO::ReadUInt8(pbuf);
if ((l & LOCATION_OVERLAY) > 0)
if (l & LOCATION_OVERLAY)
pcard = mainGame->dField.GetCard(c, l & 0x7f, s)->overlayed[ss];
else
pcard = mainGame->dField.GetCard(c, l, s);
......@@ -1630,7 +1630,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l = BufferIO::ReadUInt8(pbuf);
s = BufferIO::ReadUInt8(pbuf);
ss = BufferIO::ReadUInt8(pbuf);
if ((l & LOCATION_OVERLAY) > 0)
if (l & LOCATION_OVERLAY)
pcard = mainGame->dField.GetCard(c, l & 0x7f, s)->overlayed[ss];
else
pcard = mainGame->dField.GetCard(c, l, s);
......@@ -1654,7 +1654,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
l = BufferIO::ReadUInt8(pbuf);
s = BufferIO::ReadUInt8(pbuf);
ss = BufferIO::ReadUInt8(pbuf);
if ((l & LOCATION_OVERLAY) > 0)
if (l & LOCATION_OVERLAY)
pcard = mainGame->dField.GetCard(c, l & 0x7f, s)->overlayed[ss];
else
pcard = mainGame->dField.GetCard(c, l, s);
......@@ -2201,7 +2201,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
}
if (field_confirm.size() > 0) {
mainGame->WaitFrameSignal(5);
for(size_t i = 0; i < field_confirm.size(); ++i) {
for(int i = 0; i < (int)field_confirm.size(); ++i) {
pcard = field_confirm[i];
c = pcard->controler;
l = pcard->location;
......@@ -2231,7 +2231,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
mainGame->WaitFrameSignal(30);
else
mainGame->WaitFrameSignal(90);
for(size_t i = 0; i < field_confirm.size(); ++i) {
for(int i = 0; i < (int)field_confirm.size(); ++i) {
pcard = field_confirm[i];
mainGame->dField.MoveCard(pcard, 5);
pcard->is_highlighting = false;
......@@ -3072,7 +3072,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
unsigned int l = BufferIO::ReadUInt8(pbuf);
int s = BufferIO::ReadUInt8(pbuf);
int ss = BufferIO::ReadUInt8(pbuf);
if ((l & LOCATION_OVERLAY) > 0)
if (l & LOCATION_OVERLAY)
pcards[i] = mainGame->dField.GetCard(c, l & 0x7f, s)->overlayed[ss];
else
pcards[i] = mainGame->dField.GetCard(c, l, s);
......
......@@ -2407,19 +2407,19 @@ void ClientField::ShowCancelOrFinishButton(int buttonOp) {
void ClientField::SetShowMark(ClientCard* pcard, bool enable) {
if(pcard->equipTarget)
pcard->equipTarget->is_showequip = enable;
for(auto cit = pcard->equipped.begin(); cit != pcard->equipped.end(); ++cit)
(*cit)->is_showequip = enable;
for(auto cit = pcard->cardTarget.begin(); cit != pcard->cardTarget.end(); ++cit)
(*cit)->is_showtarget = enable;
for(auto cit = pcard->ownerTarget.begin(); cit != pcard->ownerTarget.end(); ++cit)
(*cit)->is_showtarget = enable;
for(auto chit = chains.begin(); chit != chains.end(); ++chit) {
if(pcard == chit->chain_card) {
for(auto tgit = chit->target.begin(); tgit != chit->target.end(); ++tgit)
(*tgit)->is_showchaintarget = enable;
for (auto& card : pcard->equipped)
card->is_showequip = enable;
for (auto& card : pcard->cardTarget)
card->is_showtarget = enable;
for (auto& card : pcard->ownerTarget)
card->is_showtarget = enable;
for (auto& ch : chains) {
if (pcard == ch.chain_card) {
for (auto& tg : ch.target)
tg->is_showchaintarget = enable;
}
if(chit->target.find(pcard) != chit->target.end())
chit->chain_card->is_showchaintarget = enable;
if (ch.target.find(pcard) != ch.target.end())
ch.chain_card->is_showchaintarget = enable;
}
}
void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* element, irr::gui::IGUIElement* parent) {
......@@ -2428,26 +2428,28 @@ void ClientField::ShowCardInfoInList(ClientCard* pcard, irr::gui::IGUIElement* e
if(pcard->code) {
str.append(dataManager.GetName(pcard->code));
}
if(pcard->overlayTarget) {
myswprintf(formatBuffer, dataManager.GetSysString(225), dataManager.GetName(pcard->overlayTarget->code), pcard->overlayTarget->sequence + 1);
str.append(L"\n").append(formatBuffer);
}
if((pcard->status & STATUS_PROC_COMPLETE)
&& (pcard->type & (TYPE_RITUAL | TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK | TYPE_SPSUMMON)))
str.append(L"\n").append(dataManager.GetSysString(224));
for(auto iter = pcard->desc_hints.begin(); iter != pcard->desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
for(size_t i = 0; i < chains.size(); ++i) {
auto chit = chains[i];
if(pcard == chit.chain_card) {
myswprintf(formatBuffer, dataManager.GetSysString(216), i + 1);
if (pcard->location != LOCATION_DECK) {
if (pcard->overlayTarget) {
myswprintf(formatBuffer, dataManager.GetSysString(225), dataManager.GetName(pcard->overlayTarget->code), pcard->overlayTarget->sequence + 1);
str.append(L"\n").append(formatBuffer);
}
if(chit.target.find(pcard) != chit.target.end()) {
myswprintf(formatBuffer, dataManager.GetSysString(217), i + 1, dataManager.GetName(chit.chain_card->code));
str.append(L"\n").append(formatBuffer);
if ((pcard->status & STATUS_PROC_COMPLETE)
&& (pcard->type & (TYPE_RITUAL | TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK | TYPE_SPSUMMON)))
str.append(L"\n").append(dataManager.GetSysString(224));
for (auto iter = pcard->desc_hints.begin(); iter != pcard->desc_hints.end(); ++iter) {
myswprintf(formatBuffer, L"\n*%ls", dataManager.GetDesc(iter->first));
str.append(formatBuffer);
}
for (size_t i = 0; i < chains.size(); ++i) {
const auto& chit = chains[i];
if (pcard == chit.chain_card) {
myswprintf(formatBuffer, dataManager.GetSysString(216), i + 1);
str.append(L"\n").append(formatBuffer);
}
if (chit.target.find(pcard) != chit.target.end()) {
myswprintf(formatBuffer, dataManager.GetSysString(217), i + 1, dataManager.GetName(chit.chain_card->code));
str.append(L"\n").append(formatBuffer);
}
}
}
if(str.length() > 0) {
......
......@@ -327,15 +327,15 @@ public:
#define ERRMSG_SIDEERROR 0x3
#define ERRMSG_VERERROR 0x4
#define DECKERROR_LFLIST 0x1
#define DECKERROR_OCGONLY 0x2
#define DECKERROR_TCGONLY 0x3
#define DECKERROR_UNKNOWNCARD 0x4
#define DECKERROR_CARDCOUNT 0x5
#define DECKERROR_MAINCOUNT 0x6
#define DECKERROR_EXTRACOUNT 0x7
#define DECKERROR_SIDECOUNT 0x8
#define DECKERROR_NOTAVAIL 0x9
#define DECKERROR_LFLIST 0x1U
#define DECKERROR_OCGONLY 0x2U
#define DECKERROR_TCGONLY 0x3U
#define DECKERROR_UNKNOWNCARD 0x4U
#define DECKERROR_CARDCOUNT 0x5U
#define DECKERROR_MAINCOUNT 0x6U
#define DECKERROR_EXTRACOUNT 0x7U
#define DECKERROR_SIDECOUNT 0x8U
#define DECKERROR_NOTAVAIL 0x9U
#define MODE_SINGLE 0x0
#define MODE_MATCH 0x1
......
......@@ -353,7 +353,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
unsigned int deckerror = 0;
if(!host_info.no_check_deck) {
if(deck_error[dp->type]) {
deckerror = (DECKERROR_UNKNOWNCARD << 28) + deck_error[dp->type];
deckerror = (DECKERROR_UNKNOWNCARD << 28) | deck_error[dp->type];
} else {
deckerror = deckManager.CheckDeck(pdeck[dp->type], host_info.lflist, host_info.rule);
}
......
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