コード例 #1
0
        private int ApplyStoreFailstackEx(EnhancementState state, int toGrade)
        {
            if (state.JustFailedGrade < 0 || state.FailStack <= 10)
            {
                return(-1);
            }

            var numEmptySlots = state.StoredFailstacks.Count(f => f == 0);

            if (TargetFailstack > 0 && state.FailStack > TargetFailstack - MaxFailstackShift && state.StoredFailstacks.Max(f => f) > TargetFailstack - MaxFailstackShift)
            {
                return(-1);
            }

            if (toGrade == 2 && numEmptySlots <= 1)
            {
                return(-1);
            }

            var emptySlot = -1;

            foreach (var failstack in state.StoredFailstacks)
            {
                emptySlot++;
                if (failstack == 0)
                {
                    break;
                }
            }

            if (emptySlot < 0)
            {
                return(emptySlot);
            }

            if (!MaxFailstacks.TryGetValue(toGrade - 1, out var maxFailstack))
            {
                maxFailstack = Failstacks[toGrade - 1];
            }

            // if (toGrade == 2 && numEmptySlots < 4)
            //    maxFailstack /= 2;

            if (state.FailStack > maxFailstack)  // && toGrade < _targetGrade)
            {
                return(emptySlot);
            }

            return(-1);
        }
コード例 #2
0
        private int ApplyRestoreFailstackEx(EnhancementState state, int toGrade)
        {
            if (state.FailStack != 0 || toGrade < 2)
            {
                return(-1);
            }

            if (!MaxFailstacks.TryGetValue(toGrade - 1, out var maxFailstack))
            {
                maxFailstack = Failstacks[toGrade];
            }

            if (!MinFailstacks.TryGetValue(toGrade - 1, out var minFailstack))
            {
                minFailstack = 1;
            }

            if (toGrade == 3 && state.StoredFailstacks.Count(f => f > 0) > 1 && state.StoredFailstacks.Where(f => f > 0).Min() > maxFailstack)
            {
                maxFailstack += 12;
            }

            if (toGrade == 2 && state.StoredFailstacks.Count(f => f > 0) > 2 && state.StoredFailstacks.Where(f => f > 0).Min() > maxFailstack)
            {
                maxFailstack += 12;
            }

            var failstackToTake = state.StoredFailstacks.Where(f => f >= minFailstack && f <= maxFailstack)
                                  .OrderByDescending(f => f)
                                  .FirstOrDefault(); //.Skip(_targetGrade - toGrade).FirstOrDefault();

            var slot = -1;

            if (failstackToTake > 0)
            {
                for (var i = 0; i < state.StoredFailstacks.Length; ++i)
                {
                    if (state.StoredFailstacks[i] != failstackToTake)
                    {
                        continue;
                    }

                    slot = i;
                    break;
                }
            }

            return(slot);
        }