using System.Collections.Generic; namespace Wizard; public static class AICountdownChangeUtility { public static float EvalChantCountChange(AIVirtualCard actCard, int amount, List playPtn, bool isSelect, AISituationInfo situation) { if (GetMemberChantFieldNum(actCard.SelfField, playPtn) <= 0) { return 0f; } float num = 0f; List allyClassAndInplayCards = actCard.SelfField.CardListSet.AllyClassAndInplayCards; List list = new List(); for (int i = 0; i < allyClassAndInplayCards.Count; i++) { AIVirtualCard aIVirtualCard = allyClassAndInplayCards[i]; if ((aIVirtualCard.CardIndex != actCard.CardIndex || aIVirtualCard.IsPlayer != actCard.IsPlayer) && aIVirtualCard.IsCountdownAmulet) { list.Add(aIVirtualCard); } } if (playPtn != null && playPtn.Count > 0) { for (int j = 0; j < playPtn.Count; j++) { AIVirtualCard aIVirtualCard2 = actCard.SelfField.AllyHandCards[playPtn[j]]; if ((aIVirtualCard2.CardIndex != actCard.CardIndex || aIVirtualCard2.IsPlayer != actCard.IsPlayer) && aIVirtualCard2.IsCountdownAmulet) { list.Add(aIVirtualCard2); } } } if (isSelect) { int bestCandidateIndex = 0; return CalcMaxSelectChantCountChangeBonus(amount, list, playPtn, ref bestCandidateIndex, situation); } return CalcAllChantCountChangeBonus(amount, list, playPtn, situation); } public static float CalcMaxSelectChantCountChangeBonus(int amount, List targets, List playPtn, ref int bestCandidateIndex, AISituationInfo situation) { float num = 0f; int count = targets.Count; for (int i = 0; i < count; i++) { AIVirtualCard aIVirtualCard = targets[i]; float num2 = aIVirtualCard.EvaluateValueOnField(playPtn, situation, useStyle: false, doesUseLostLife: true, useOthersTag: true, useIgnoreInBattle: true); AIVirtualCard aIVirtualCard2 = new AIVirtualCard(aIVirtualCard, aIVirtualCard.SelfField); int chantCount = aIVirtualCard2.ChantCount; chantCount = ((chantCount > amount) ? (chantCount - amount) : 0); float num3 = 0f; if (chantCount > 0) { aIVirtualCard2.ChantCount = chantCount; num3 = aIVirtualCard2.EvaluateValueOnField(playPtn, situation, useStyle: false, doesUseLostLife: true, useOthersTag: true, useIgnoreInBattle: true); } else { num3 = aIVirtualCard.EvaluateBreakValue(playPtn, useIgnoreBreak: true); } float num4 = num3 - num2; if (num4 > num) { num = num4; bestCandidateIndex = i; } } return num; } public static float CalcAllChantCountChangeBonus(int amount, List targets, List playPtn, AISituationInfo situation) { float num = 0f; int count = targets.Count; for (int i = 0; i < count; i++) { AIVirtualCard aIVirtualCard = targets[i]; float num2 = aIVirtualCard.EvaluateValueOnField(playPtn, situation, useStyle: false, doesUseLostLife: true, useOthersTag: true, useIgnoreInBattle: true); AIVirtualCard aIVirtualCard2 = new AIVirtualCard(aIVirtualCard, aIVirtualCard.SelfField); int chantCount = aIVirtualCard2.ChantCount; chantCount = ((chantCount > amount) ? (chantCount - amount) : 0); float num3 = 0f; if (chantCount > 0) { aIVirtualCard2.ChantCount = chantCount; num3 = aIVirtualCard2.EvaluateValueOnField(playPtn, situation, useStyle: false, doesUseLostLife: true, useOthersTag: true, useIgnoreInBattle: true); } else { num3 = aIVirtualCard.EvaluateBreakValue(playPtn, useIgnoreBreak: true); } num += num3 - num2; } return num; } public static int GetMemberChantFieldNum(AIVirtualField field, List handPtn) { int num = 0; for (int i = 0; i < field.AllyInplayCards.Count; i++) { if (field.AllyInplayCards[i].IsCountdownAmulet) { num++; } } if (handPtn != null) { for (int j = 0; j < handPtn.Count; j++) { if (field.AllyHandCards[handPtn[j]].IsCountdownAmulet) { num++; } } } return num; } }