From c9e7e9b97216f426ceba3a96df7be1b21799c2b8 Mon Sep 17 00:00:00 2001 From: Swerik Date: Sun, 10 Nov 2024 14:20:25 +0100 Subject: [PATCH 1/2] fix SelectSum for Mandatory Cards that can change their Level with effects --- Game/GameBehavior.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index 0770fe08..d395007d 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; + 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 = cardIndex == mandatoryCards.Count - 1 + ? _ai.OnSelectSum(cards, tempSumVal, min, max, _select_hint, mode) + : 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]; From 55154de2abc2773eace8e2dacbe46163beb9af2b Mon Sep 17 00:00:00 2001 From: Swerik Date: Sun, 10 Nov 2024 16:03:17 +0100 Subject: [PATCH 2/2] fix IndexOutOfBoundsException when MandatoryCards.Count == 0 --- Game/GameBehavior.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Game/GameBehavior.cs b/Game/GameBehavior.cs index d395007d..11d42b9e 100644 --- a/Game/GameBehavior.cs +++ b/Game/GameBehavior.cs @@ -1605,15 +1605,15 @@ private void OnSelectSum(BinaryReader packet) IList SelectSumRecursive(int cardIndex, int sumVal) { + 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 = cardIndex == mandatoryCards.Count - 1 - ? _ai.OnSelectSum(cards, tempSumVal, min, max, _select_hint, mode) - : SelectSumRecursive(cardIndex + 1, tempSumVal); + IList tempResult = SelectSumRecursive(cardIndex + 1, tempSumVal); if (tempResult.Count >= min) return tempResult; }