/// <summary>
        /// Ранг для параметра
        /// </summary>
        /// <param name="типХарактеристики">
        /// Тип параметра (опыт, скилл, характеристика, квест)
        /// </param>
        /// <param name="valueProperty">
        /// Значение параметра
        /// </param>
        /// <param name="isPocazatelProperty">
        /// Показатель?
        /// </param>
        /// <param name="rangsParam">
        /// Ранги
        /// </param>
        /// <returns>
        /// Ранг
        /// </returns>
        private string getRang(
            string типХарактеристики,
            double valueProperty,
            bool isPocazatelProperty,
            ObservableCollection <Rangs> rangsParam)
        {
            switch (типХарактеристики)
            {
            case "Квест":
                return(string.Empty);

            case "Опыт":
                break;

            case "Навык":
                return(this.RangName(rangsParam, StaticMetods.GetLevel(valueProperty, RpgItemsTypes.ability)));

            case "Характеристика":
                return(isPocazatelProperty != true
                        ? this.RangName(rangsParam, StaticMetods.GetLevel(valueProperty, RpgItemsTypes.characteristic))
                        : string.Empty);
            }

            return(string.Empty);
        }
        /// <summary>
        /// Получаем максимальное значение для прогресс бара параметра
        /// </summary>
        /// <param name="typeParam">
        /// тип параметра (квест, опыт, характеристика, скилл)
        /// </param>
        /// <param name="valueParam">
        /// значение параметра
        /// </param>
        /// <param name="pocazatelParam">
        /// Это показатель?
        /// </param>
        /// <param name="maxParamValue">
        /// Максимальное значение для показателя
        /// </param>
        /// <returns>
        /// Максимальное значение прогресс бара
        /// </returns>
        private double getMax(string typeParam, double valueParam, bool pocazatelParam = false, int maxParamValue = 0)
        {
            RpgItemsTypes rpgType = RpgItemsTypes.exp;

            switch (typeParam)
            {
            case "Опыт":
                rpgType = RpgItemsTypes.exp;
                break;

            case "Характеристика":
                rpgType = RpgItemsTypes.characteristic;
                break;

            case "Навык":
                rpgType = RpgItemsTypes.ability;
                break;

            case "Перк":
                rpgType = RpgItemsTypes.ability;
                break;
            }

            if (typeParam != "Квест")
            {
                if (pocazatelParam == false)
                {
                    int level = StaticMetods.GetLevel(valueParam, rpgType);
                    if (valueParam < MainViewModel.опытаДоПервогоУровня)
                    {
                        return(System.Convert.ToInt32(MainViewModel.опытаДоПервогоУровня));
                    }
                    else
                    {
                        if (level == 1)
                        {
                            return(System.Convert.ToInt32(MainViewModel.опытаДоПервогоУровня - 1));
                        }

                        return(System.Convert.ToInt32((MainViewModel.опытаДоПервогоУровня * level * (level - 1)) - 1));
                    }
                }
                else
                {
                    return(maxParamValue);
                }
            }
            else
            {
                return(100);
            }
        }
        private double getMaxForExp(double val, viewChangesModel vc)
        {
            var lev        = StaticMetods.GetLevel(val, RpgItemsTypes.exp);
            var expToLevel = Pers.ExpToLevel(lev + 1, RpgItemsTypes.exp);

            //if (vc.to < vc.from && val == Pers.ExpToLevel(lev, RpgItemsTypes.exp))
            //{
            //    var level = lev - 1;
            //    if (level < 1) level = 1;
            //    expToLevel = Pers.ExpToLevel(level, RpgItemsTypes.exp);
            //}
            return(System.Convert.ToInt32(expToLevel));
        }
        public void GetLevelTest()
        {
            int level0 = StaticMetods.GetLevel(9);
            int level1 = StaticMetods.GetLevel(11);
            int level2 = StaticMetods.GetLevel(21);
            int level3 = StaticMetods.GetLevel(51);
            int level4 = StaticMetods.GetLevel(111);

            Debug.Assert(level0 == 0);
            Debug.Assert(level1 == 1);
            Debug.Assert(level2 == 2);
            Debug.Assert(level3 == 3);
            Debug.Assert(level4 == 4);
        }
        /// <summary>
        /// Уровень в характеристике, опыте, скилле
        /// </summary>
        /// <param name="типХарактеристикиParam">
        /// тип
        /// </param>
        /// <param name="ispocazatelParam">
        /// показатель?
        /// </param>
        /// <param name="toParam">
        /// начальное значение
        /// </param>
        /// <returns>
        /// текст с надписью уровня
        /// </returns>
        private string getLevel(string типХарактеристикиParam, bool ispocazatelParam, double toParam)
        {
            switch (типХарактеристикиParam)
            {
            case "Квест":
                return(string.Empty);

            case "Опыт":
                return("Уровень " + StaticMetods.GetLevel(toParam, RpgItemsTypes.exp).ToString() + ": ");

            case "Навык":
                return("Уровень: ");

            case "Характеристика":
                return("Уровень: ");
            }

            return(string.Empty);
        }
        /// <summary>
        /// Получаем минимальное значение прогресс бара для параметра
        /// </summary>
        /// <param name="typeParam">
        /// тип параметра (квест, опыт, характеристика, скилл)
        /// </param>
        /// <param name="valueParam">
        /// значение параметра
        /// </param>
        /// <param name="pocazatelParam">
        /// Это показатель?
        /// </param>
        /// <returns>
        /// минимальное значение прогресс бара
        /// </returns>
        private double getMin(string typeParam, double valueParam, bool pocazatelParam = false)
        {
            RpgItemsTypes rpgType = RpgItemsTypes.exp;

            switch (typeParam)
            {
            case "Опыт":
                rpgType = RpgItemsTypes.exp;
                break;

            case "Характеристика":
                rpgType = RpgItemsTypes.characteristic;
                break;

            case "Навык":
                rpgType = RpgItemsTypes.ability;
                break;

            case "Перк":
                rpgType = RpgItemsTypes.ability;
                break;
            }

            if (typeParam != "Квест")
            {
                if (pocazatelParam == false)
                {
                    if (typeParam == "Навык")
                    {
                    }
                    else
                    {
                    }

                    int level = StaticMetods.GetLevel(valueParam, rpgType);
                    if (valueParam < MainViewModel.опытаДоПервогоУровня)
                    {
                        return(0);
                    }
                    else
                    {
                        if (level == 1)
                        {
                            return(MainViewModel.опытаДоПервогоУровня);
                        }
                        else
                        {
                            return(MainViewModel.опытаДоПервогоУровня * (level - 1) * level);
                        }
                    }
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(0);
            }
        }
        /// <summary>
        /// Уровень в параметре поднялся?
        /// </summary>
        /// <param name="typeParam">
        /// Тип параметра
        /// </param>
        /// <param name="isPokazatelParam">
        /// Это паказатель?
        /// </param>
        /// <param name="fromParam">
        /// Начальное значение параметра
        /// </param>
        /// <param name="toParam">
        /// Конечное значение параметра
        /// </param>
        /// <returns>
        /// Изменение характеристики видимость
        /// </returns>
        private Visibility getlevelUpVisibility(
            string typeParam,
            bool isPokazatelParam,
            double fromParam,
            double toParam)
        {
            Visibility isVisible = Visibility.Collapsed;

            switch (typeParam)
            {
            case "Опыт":
                int levelBeforeE = StaticMetods.GetLevel(fromParam, RpgItemsTypes.exp);
                int levelAfterE  = StaticMetods.GetLevel(toParam, RpgItemsTypes.exp);
                if (levelAfterE > levelBeforeE)
                {
                    this.LevelUpTextProperty = "Новый уровень!";
                    isVisible = Visibility.Visible;
                }
                else if (levelAfterE == levelBeforeE)
                {
                    isVisible = Visibility.Collapsed;
                }
                else if (levelAfterE < levelBeforeE)
                {
                    this.LevelUpTextProperty = "Уровень понижен!";
                    isVisible = Visibility.Visible;
                }

                break;

            case "Квест":
                break;

            case "Навык":
                int levelBeforeA = StaticMetods.GetLevel(fromParam, RpgItemsTypes.ability);
                int levelAfterA  = StaticMetods.GetLevel(toParam, RpgItemsTypes.ability);
                if (levelAfterA > levelBeforeA)
                {
                    this.LevelUpTextProperty = "Новый уровень!";
                    isVisible = Visibility.Visible;
                }
                else if (levelAfterA == levelBeforeA)
                {
                    isVisible = Visibility.Collapsed;
                }
                else if (levelAfterA < levelBeforeA)
                {
                    this.LevelUpTextProperty = "Уровень понижен!";
                    isVisible = Visibility.Visible;
                }

                break;

            case "Характеристика":
                if (isPokazatelParam == true)
                {
                    break;
                }
                else
                {
                    int levelBefore = StaticMetods.GetLevel(fromParam, RpgItemsTypes.characteristic);
                    int levelAfter  = StaticMetods.GetLevel(toParam, RpgItemsTypes.characteristic);
                    if (levelAfter > levelBefore)
                    {
                        this.LevelUpTextProperty = "Новый уровень!";
                        isVisible = Visibility.Visible;
                    }
                    else if (levelAfter == levelBefore)
                    {
                        isVisible = Visibility.Collapsed;
                    }
                    else if (levelAfter < levelBefore)
                    {
                        this.LevelUpTextProperty = "Уровень понижен!";
                        isVisible = Visibility.Visible;
                    }

                    break;
                }
            }

            return(isVisible);
        }
        private string getRangForExp(double val, viewChangesModel vc)
        {
            var lev = StaticMetods.GetLevel(val, RpgItemsTypes.exp);

            return(lev.ToString() + ":");
        }