Exemplo n.º 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);
        }
Exemplo n.º 2
0
 set => SetValue(StatsProperty, value);
Exemplo n.º 3
0
        private string AddInfo(IEnumerable <string> messages)
        {
            // Path
            var roomMgr = ObjectManager <IRoom> .Instance.Get <Room.RoomManager>();

            var path = string.Join(">", User.RoomManager.Rooms
                                   .Reverse()
                                   .Select(room => roomMgr.Get(room.Identifier)?.Name)
                                   .Concat(new[] { roomMgr.Get(User.RoomManager.CurrentRoom?.Identifier)?.Name })
                                   .Where(n => n != null)
                                   );

            var stats = new StringBuilder();

            foreach (ShownStats shownStat in Enum.GetValues(typeof(ShownStats)))
            {
                if ((shownStat & ShownStats) == 0)
                {
                    continue;
                }

                switch (shownStat)
                {
                case ShownStats.Health:
                {
                    var heart   = "♥️";
                    var percent = User.Info.CurrentStats.Effect[StatsProperty.Health] /
                                  User.Info.MaxStats.Effect[StatsProperty.Health];
                    if (percent < 1m / 3)
                    {
                        heart = "🖤️";     // black
                    }
                    else if (percent < 2m / 3)
                    {
                        heart = "💛";     // yellow
                    }
                    else if (percent < 2m / 3)
                    {
                        heart = "❤️";     // red
                    }

                    stats.Append($"{heart}{User.Info.CurrentStats.Effect[StatsProperty.Health]:F2}");
                    break;
                }

                case ShownStats.Intelligence:
                {
                    const StatsProperty prop = StatsProperty.Intelligence;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Strength:
                {
                    const StatsProperty prop = StatsProperty.Strength;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Mana:
                {
                    const StatsProperty prop = StatsProperty.Mana;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Stamina:
                {
                    const StatsProperty prop = StatsProperty.Stamina;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Defence:
                {
                    const StatsProperty prop = StatsProperty.Defence;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Karma:
                {
                    const StatsProperty prop = StatsProperty.Karma;
                    stats.Append($" {Stats.Stats.Emojis[prop]}{User.Info.CurrentStats.Effect[prop]:F2}");
                    break;
                }

                case ShownStats.Gold:
                {
                    stats.Append($" 💰{User.Info.Gold:F2}");
                    break;
                }

                case ShownStats.Default:
                    break;

                default:
                {
                    throw new ArgumentOutOfRangeException();
                }
                }
            }

            return(string.Join("\n\n", Enumerable.Empty <string>()
                               .Concat(new[] { $"<i>{path}</i>" })
                               .Concat(messages)
                               .Concat(new[] { stats.ToString() })
                               ));
        }
Exemplo n.º 4
0
 get => (IEnumerable <IStatItem <double> >)GetValue(StatsProperty); set => SetValue(StatsProperty, value);
Exemplo n.º 5
0
 public decimal? GetStatOrNull(StatsProperty property)
 {
     return Effect.TryGetValue(property, out var result)
         ? (decimal?) result
         : null;
 }
Exemplo n.º 6
0
 public decimal GetStat(StatsProperty property)
 {
     return(GetStatOrNull(property) ?? DefaultStats[property]);
 }
Exemplo n.º 7
0
 public decimal GetStat(StatsProperty property)
 {
     return(Effect.TryGetValue(property, out var result)
         ? result
         : DefaultStats[property]);
 }
Exemplo n.º 8
0
 /// <summary>
 ///     Изменяет указанную характеристику героя. Не позволяет стать характеристике больше максимума или меньше нуля.
 /// </summary>
 /// <param name="property">Какую характеристку следует изменить</param>
 /// <param name="value">На сколько надо изменить. Отрицательное для того, чтобы уменьшить</param>
 /// <param name="set">Необходимо жестко установить новое значение (true) или прибавить к текущему</param>
 public bool ChangeStats(StatsProperty property, decimal value, bool set = false)
 {
     return(ChangeStats(set ? ChangeType.Set : ChangeType.Add, property, value));
 }