コード例 #1
0
        private IProp[] GenerateContent(DropTableScheme[] dropTables)
        {
            //TODO Модификаторы нужно будет получать из игрока, актёра, который открыл сундук и актёров, которые на это могу повлиять.
            var modificators  = new DropTableModificatorScheme[0];
            var rolledRecords = new List <DropTableRecordSubScheme>();

            foreach (var table in dropTables)
            {
                var records = table.Records;
                var recMods = GetModRecords(records, modificators);

                var totalWeight = recMods.Sum(x => x.ModifiedWeight);

                // Записи с нулевым весом всегда добавляются.
                rolledRecords.AddRange(records.Where(x => x.Weight == 0));

                for (var rollIndex = 0; rollIndex < table.Rolls; rollIndex++)
                {
                    var rolledWeight = _randomSource.RollWeight(totalWeight);
                    var recMod       = DropRoller.GetRecord(recMods, rolledWeight);

                    if (recMod.Record.SchemeSid == null)
                    {
                        continue;
                    }

                    rolledRecords.Add(recMod.Record);
                }
            }

            var props = rolledRecords.Select(GenerateProp).ToArray();

            return(props);
        }
コード例 #2
0
        private static IDropTableModificatorScheme CreateEvilHourModifier(DateTime targetDate, float duration, DateTime currentDate)
        {
            var dateDiff = targetDate - currentDate;

            var days           = dateDiff.Days;
            var ration         = days / duration;
            var inversedRation = 1 - ration;
            var bonus          = duration * inversedRation;
            var mod            = new DropTableModificatorScheme
            {
                PropSids = new[] { "evil-pumpkin" },
                //TODO Зачем вообще здесь -1. Бонус - это число, на которое нужно умножить.
                WeightBonus = bonus - 1
            };

            return(mod);
        }
コード例 #3
0
        private IDropTableModificatorScheme[] GetModifiers()
        {
            var totalModifierList = new List <IDropTableModificatorScheme>();

            var currentDate = DateTime.Now;
            // Основано на хелловине
            var evilHour      = new DateTime(currentDate.Year, 11, 2);
            var evilHourStart = evilHour.AddDays(-5);
            var evilHourEnd   = evilHour.AddDays(2);

            if (evilHourStart <= currentDate && currentDate <= evilHourEnd)
            {
                // Канун злого часа
                if (currentDate <= evilHour)
                {
                    var t   = 1 - (evilHour - currentDate).Days / 5.0f;
                    var mod = new DropTableModificatorScheme
                    {
                        PropSids    = new[] { "evil-pumpkin" },
                        WeightBonus = 95 * t
                    };

                    totalModifierList.Add(mod);
                }
                else
                {
                    var t   = (currentDate - evilHourEnd).Days / 2.0f;
                    var mod = new DropTableModificatorScheme
                    {
                        PropSids    = new[] { "evil-pumpkin" },
                        WeightBonus = 95 * t
                    };

                    totalModifierList.Add(mod);
                }
            }

            return(totalModifierList.ToArray());
        }