using System; using System.Collections.Generic; using System.Linq; public class SkillIdNoDuplicationRandomSelectFilter : ISkillSelectFilter { private readonly string _context; private int _count; public int Count => _count; public SkillIdNoDuplicationRandomSelectFilter(string randomCountText) { _context = randomCountText; } public int CalcCount(SkillOptionValue option) { return option.ParseInt(_context); } public IEnumerable Filtering(IEnumerable cards, SkillOptionValue option, SkillConditionCheckerOption checkerOption) { _count = CalcCount(option); cards = cards.OrderBy((BattleCardBase x) => x.Index); List cardList = cards.ToList(); BattleManagerBase battleMgr = BattleManagerBase.GetIns(); _count = Math.Min(_count, cardList.Count); for (int i = 0; i < _count; i++) { if (cardList.Count > 0) { int index = (BattleManagerBase.IsRandomDraw ? battleMgr.StableRandom(cardList.Count) : 0); BattleCardBase card = cardList[index]; cardList = cardList.Where((BattleCardBase c) => c.Card.BaseParameter.BaseCardId != card.BaseParameter.BaseCardId).ToList(); yield return card; } } } public static IEnumerable Filtering(int selectCount, IEnumerable cards, BattleManagerBase battleMgr) { cards = cards.OrderBy((BattleCardBase x) => x.Index); List list = cards.ToList(); List list2 = new List(); int num = Math.Min(selectCount, list.Count); for (int num2 = 0; num2 < num; num2++) { if (list.Count > 0) { int index = battleMgr.StableRandom(list.Count); BattleCardBase card = list[index]; list = list.Where((BattleCardBase c) => c.Card.BaseParameter.BaseCardId != card.BaseParameter.BaseCardId).ToList(); list2.Add(card); } } return list2; } public bool IsUpperLimit() { return _context == "5-{me.inplay.unit_and_allfield.count}"; } }