diff --git a/assets/js/app.deck.js b/assets/js/app.deck.js index 80f4c1e8..875fe228 100755 --- a/assets/js/app.deck.js +++ b/assets/js/app.deck.js @@ -1197,6 +1197,31 @@ } return true; }; + var validate_bloody_mummers = function() { + var plots = deck.get_cards(null, { type_code: 'plot' }); + var re = new RegExp(Translator.trans('card.traits.kingdom') + '\\.'); + var rhett = true; + plots.forEach(function(plot) { + if (re.test(plot.traits)) { + rhett = false; + } + }) + return rhett; + }; + var validate_many_faced_god = function() { + var characters = deck.get_cards(null, { type_code: 'character' }); + var traitlessCharacterCount = 0; + for (i = 0, n = characters.length; i < n; i++) { + if (! characters[i].traits) { + traitlessCharacterCount += characters[i].indeck; + } + if (3 <= traitlessCharacterCount) { + return true; + } + } + return 3 <= traitlessCharacterCount; + }; + switch(agenda.code) { case '01027': if(deck.get_nb_cards(deck.get_cards(null, {type_code: {$in: ['character', 'attachment', 'location', 'event']}, faction_code: 'neutral'})) > 15) { @@ -1259,8 +1284,6 @@ return false; } break; - case '17150': - return validate_redesigned_the_free_folk(); case '13099': return validate_the_white_book(); case '13118': @@ -1271,6 +1294,12 @@ return validate_dark_wings_dark_words(); case '17149': return validate_redesigned_sea_of_blood(); + case '17150': + return validate_redesigned_the_free_folk(); + case '20051': + return validate_bloody_mummers(); + case '20052': + return validate_many_faced_god(); } return true; }; diff --git a/src/Services/DeckValidationHelper.php b/src/Services/DeckValidationHelper.php index 5ce9027a..9784aeff 100755 --- a/src/Services/DeckValidationHelper.php +++ b/src/Services/DeckValidationHelper.php @@ -248,6 +248,10 @@ protected function validateAgenda(SlotCollectionInterface $slots, CardInterface return $this->validateRedesignedSeaOfBlood($slots); case '17150': return $this->validateRedesignedFreeFolk($slots); + case '20051': + return $this->validateBloodyMummers($slots); + case '20052': + return $this->validateManyFacedGod($slots); default: return true; } @@ -529,4 +533,42 @@ protected function validateDarkWingsDarkWords(SlotCollectionInterface $slots): b } return true; } + + /** + * @param SlotCollectionInterface $slots + * @return bool + */ + protected function validateBloodyMummers(SlotCollectionInterface $slots): bool + { + $plotSlots = $slots->getPlotDeck(); + $trait = $this->translator->trans('card.traits.kingdom'); + /* @var SlotInterface $slot */ + foreach ($plotSlots as $slot) { + if (preg_match("/$trait\\./", $slot->getCard()->getTraits())) { + return false; + } + } + return true; + } + + /** + * @param SlotCollectionInterface $slots + * @return bool + */ + protected function validateManyFacedGod(SlotCollectionInterface $slots): bool + { + $characterSlots = $slots->getDrawDeck()->filterByType('character'); + $traitlessCharactersCount = 0; + /* @var SlotInterface $slot */ + foreach ($characterSlots as $slot) { + if (! $slot->getCard()->getTraits()) { + $traitlessCharactersCount += $slot->getQuantity(); + } + if (3 <= $traitlessCharactersCount) { + return true; + } + } + + return 3 <= $traitlessCharactersCount; + } } diff --git a/translations/messages.de.yml b/translations/messages.de.yml index 338c5bdb..6062fc5a 100644 --- a/translations/messages.de.yml +++ b/translations/messages.de.yml @@ -417,6 +417,7 @@ card: scheme: Komplott banner: Banner maester: Maester + kingdom: Königreich kingsguard: Königsgarde wildling: Wildling reviews: diff --git a/translations/messages.en.yml b/translations/messages.en.yml index 94d92713..edda6c79 100644 --- a/translations/messages.en.yml +++ b/translations/messages.en.yml @@ -417,6 +417,7 @@ card: scheme: Scheme banner: Banner maester: Maester + kingdom: Kingdom kingsguard: Kingsguard wildling: Wildling reviews: diff --git a/translations/messages.es.yml b/translations/messages.es.yml index c8b22553..418e3ba2 100644 --- a/translations/messages.es.yml +++ b/translations/messages.es.yml @@ -416,6 +416,7 @@ card: scheme: Conspiración banner: Estandarte maester: Maestre + kingdom: Reino kingsguard: Guardia Real wildling: Salvaje reviews: