Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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());
        }