private void NextEncount()
        {
            if (isOperatingNextEncount)
            {
                return;
            }
            isOperatingNextEncount = true;
            Model   model = Model as Model;
            Encount e     = NextAvailableEncounts[SelectedEncountItem.Value];

            model.Next(e.ID);
            SetEncounts();
            isOperatingNextEncount = false;
        }
        private void SetEncounts()
        {
            Model model = Model as Model;

            if (model == null)
            {
                return;
            }

            bool[] currentAvailables = model.CurrentAvailableMonsterPartyIndeces();

            AvilableTable.Value = string.Join(",", model.CurrentAvailableTableIndex());

            NextAvailableEncounts.Clear();
            foreach (var i in Enumerable.Range(0, 8))
            {
                if (currentAvailables[i])
                {
                    Encount newEncount = new Encount();
                    newEncount.ID = i;
                    FieldData fd = PlaceListItems[SelectedPlaceItem.Value];
                    newEncount.EncountName = $"{model.encountTable.pattern[fd.ID].party[i]}";
                    NextAvailableEncounts.Add(newEncount);
                }
            }

            EncountLog.Value = "";
            foreach (var i in Enumerable.Range(0, model.currentEncountIndex))
            {
                var       tableIndices = model.CurrentAvailableTableIndex();
                int       partyIndex   = model.encountTable.table[i, tableIndices[0]];
                FieldData fd           = PlaceListItems[SelectedPlaceItem.Value];
                string    partyPattern = model.encountTable.pattern[fd.ID].party[partyIndex];
                EncountLog.Value += $"{i} : {partyPattern}\n";
            }

            //update forcast
            EncountForecast.Value = "";
            foreach (var i in Enumerable.Range(0, 32))
            {
                int encountCounter = model.currentEncountIndex + i;
                EncountForecast.Value += $"{encountCounter}\n";
                var tableIndices = model.CurrentAvailableTableIndex();

                List <EncountPattern> lstEncountPatterns = new List <EncountPattern>();
                foreach (var tableIndex in tableIndices)
                {
                    int       partyIndex   = model.encountTable.table[encountCounter, tableIndex];
                    FieldData fd           = PlaceListItems[SelectedPlaceItem.Value];
                    string    partyPattern = model.encountTable.pattern[fd.ID].party[partyIndex];

                    var array = (from x in lstEncountPatterns where x.partyPattern == partyPattern select x).ToArray();
                    if (array.Length == 0)
                    {
                        EncountPattern ep = new EncountPattern();
                        ep.indices.Add(tableIndex);
                        ep.partyPattern = partyPattern;
                        lstEncountPatterns.Add(ep);
                    }
                    else
                    {
                        array[0].indices.Add(tableIndex);
                    }
                }
                foreach (var pattern in lstEncountPatterns)
                {
                    EncountForecast.Value += $"\t{string.Join(",", pattern.indices)} : {pattern.partyPattern}\n";
                }
                EncountForecast.Value += "\n";
            }

            CurrentEncount.Value = model.currentEncountIndex;
        }