Commit 9592567c authored by nanahira's avatar nanahira

fix deck_con credit

parent 2326c4c5
Pipeline #40710 failed with stages
in 29 minutes and 9 seconds
...@@ -1932,28 +1932,36 @@ bool DeckBuilder::check_limit(code_pointer pointer) { ...@@ -1932,28 +1932,36 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
auto flit = filterList->content.find(limitcode); auto flit = filterList->content.find(limitcode);
if(flit != filterList->content.end()) if(flit != filterList->content.end())
limit = flit->second; limit = flit->second;
auto remaining_credits = filterList->credit_limits; std::unordered_map<std::wstring, uint32_t> credit_used;
auto limitcode_credit_it = filterList->credits.find(limitcode); auto spend_credit = [&](uint32_t code) {
auto code_credit_it = filterList->credits.find(code);
if(code_credit_it == filterList->credits.end())
return true;
auto code_credit = code_credit_it->second;
auto valid = true;
for(auto& credit_it : code_credit) {
auto key = credit_it.first;
auto credit_limit_it = filterList->credit_limits.find(key);
if(credit_limit_it == filterList->credit_limits.end())
continue;
auto credit_limit = credit_limit_it->second;
if(credit_used.find(key) == credit_used.end())
credit_used[key] = 0;
auto credit_after = credit_used[key] + credit_it.second;
if(credit_after > credit_limit)
valid = false;
credit_used[key] = credit_after;
}
return valid;
};
auto handle_card = [&](ygo::code_pointer& card) { auto handle_card = [&](ygo::code_pointer& card) {
if (card->first == limitcode || card->second.alias == limitcode) { if (card->first == limitcode || card->second.alias == limitcode) {
limit--; limit--;
if(limit <= 0) if(limit <= 0)
return false; return false;
if(limitcode_credit_it != filterList->credits.end()) {
auto limitcode_credits = limitcode_credit_it->second;
for(auto& credit : limitcode_credits) {
auto key = credit.first;
auto remaining_credit_it = remaining_credits.find(key);
if(remaining_credit_it != remaining_credits.end()) {
auto value = credit.second;
auto remaining_credit = remaining_credit_it->second;
if(remaining_credit < value)
return false;
remaining_credits[key] -= value;
}
}
}
} }
auto code = card->second.alias ? card->second.alias : card->first;
spend_credit(code);
return true; return true;
}; };
for (auto& card : deckManager.current_deck.main) { for (auto& card : deckManager.current_deck.main) {
...@@ -1968,6 +1976,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) { ...@@ -1968,6 +1976,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
if(!handle_card(card)) if(!handle_card(card))
return false; return false;
} }
return true; return spend_credit(limitcode);
} }
} }
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