예제 #1
0
        private bool ChangeStats(ChangeType changeType, StatsProperty property, decimal value, bool allowLess = false)
        {
            var changedBase = BaseStats.Apply(
                new StatsEffect(changeType, new Dictionary <StatsProperty, decimal>
            {
                { property, value }
            })
                );

            if (value < 0)
            {
                // При понижении статов, нужно проверять с учетом предметов.
                // (базовое здоровье может быть меньше нуля, т.к. предметы тебя спасут)
                var changed  = ApplyItems(changedBase, User.ActiveItemsManager.ActiveItems);
                var newValue = changed.Effect[property];
                if (!allowLess && newValue < MinStats.Effect[property])
                {
                    return(false);
                }
            }
            else
            {
                // При повышении статов, нужно проверять без учета предметов.
                // (базовое здоровье не может быть больше максимума, но предметы могут повысить за пределы максимума)
                var newValue = changedBase.Effect[property];
                var maxValue = MaxStats.Effect[property];
                if (newValue > maxValue)
                {
                    // Если результат получился больше мсаксимума, то устанавливается максимум
                    changedBase = BaseStats.Apply(
                        new StatsEffect(ChangeType.Set, new Dictionary <StatsProperty, decimal>
                    {
                        { property, maxValue }
                    })
                        );
                }
            }

            BaseStats = changedBase;
            RecalculateStats();
            return(true);
        }