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); }