public static List <MaterialItemSheet.Row> GetRewardItemRows(this StageSheet.Row stageRow) { if (GetRewardItemRowsCache.ContainsKey(stageRow.Key)) { return(GetRewardItemRowsCache[stageRow.Key]); } var tableSheets = Game.Game.instance.TableSheets; var itemRows = new List <MaterialItemSheet.Row>(); foreach (var itemId in stageRow.Rewards.Select(rewardData => rewardData.ItemId)) { if (!tableSheets.MaterialItemSheet.TryGetValue(itemId, out var item)) { continue; } itemRows.Add(item); } var result = itemRows.Distinct().ToList(); GetRewardItemRowsCache.Add(stageRow.Key, result); return(result); }
private void SetWave(StageSheet.Row stageRow, StageWaveSheet.Row stageWaveRow) { var enemyStatModifiers = stageRow.EnemyOptionalStatModifiers; var waves = stageWaveRow.Waves; foreach (var wave in waves.Select(e => SpawnWave(e, enemyStatModifiers))) { _waves.Add(wave); } }
public static WeightedSelector<StageSheet.RewardData> SetItemSelector(StageSheet.Row stageRow, IRandom random) { var itemSelector = new WeightedSelector<StageSheet.RewardData>(random); foreach (var r in stageRow.Rewards) { itemSelector.Add(r, r.Ratio); } return itemSelector; }
public void SetRewardLimitByStageDrop() { var row = new StageSheet.Row(); row.Set(new List <string> { "1", "5", "100", "0", "0", "0", "0", "0", "0", "chapter_1_1", "bgm_stage_green", "306043", "1", "2", "2", "303000", "0.01", "2", "2", string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, "1", "1", }); var itemSelector = StageSimulator.SetItemSelector(row, _random); var reward = Simulator.SetReward(itemSelector, _random.Next(1, 1), _random, _materialItemSheet); Assert.Single(reward); }
public static List <ItemBase> SetReward(StageSheet.Row stageRow, IRandom random, TableSheets tableSheets) { var itemSelector = new WeightedSelector <StageSheet.RewardData>(random); foreach (var r in stageRow.Rewards) { itemSelector.Add(r, r.Ratio); } var reward = new List <ItemBase>(); var maxCount = random.Next(stageRow.DropItemMin, stageRow.DropItemMax); while (reward.Count < maxCount) { try { var data = itemSelector.Select(1).First(); if (tableSheets.MaterialItemSheet.TryGetValue(data.ItemId, out var itemData)) { var count = random.Next(data.Min, data.Max + 1); for (var i = 0; i < count; i++) { var item = ItemFactory.CreateMaterial(itemData); if (reward.Count < maxCount) { reward.Add(item); } else { break; } } } } catch (ListEmptyException) { break; } } return(reward); }
public void SetRewardDuplicateItem() { var row = new StageSheet.Row(); row.Set(new List <string> { "1", "5", "100", "0", "0", "0", "0", "0", "0", "chapter_1_1", "bgm_stage_green", "306043", "1", "2", "2", "303000", "0.01", "2", "2", string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, "2", "2", }); var itemSelector = StageSimulator.SetItemSelector(row, _random); var reward = Simulator.SetReward(itemSelector, _random.Next(2, 2), _random, _materialItemSheet); Assert.Equal(2, reward.Count); Assert.NotEmpty(reward); Assert.Single(reward.Select(i => i.Id).ToImmutableHashSet()); }