diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index 0770fe08..11d42b9e 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -1601,12 +1601,25 @@ private void OnSelectSum(BinaryReader packet) } } - for (int k = 0; k < mandatoryCards.Count; ++k) + IList selected = SelectSumRecursive(0, sumval); + + IList SelectSumRecursive(int cardIndex, int sumVal) { - sumval -= mandatoryCards[k].OpParam1; + if (cardIndex >= mandatoryCards.Count) return _ai.OnSelectSum(cards, sumVal, min, max, _select_hint, mode); + + ClientCard card = mandatoryCards[cardIndex]; + for (int opParam = 0; opParam < 2; opParam++) + { + int opParamValue = opParam == 0 ? card.OpParam1 : card.OpParam2; + int tempSumVal = sumVal - opParamValue; + + IList tempResult = SelectSumRecursive(cardIndex + 1, tempSumVal); + if (tempResult.Count >= min) return tempResult; + } + + return new List(); } - IList selected = _ai.OnSelectSum(cards, sumval, min, max, _select_hint, mode); _select_hint = 0; byte[] result = new byte[mandatoryCards.Count + selected.Count + 1];