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