public void Execute(GameState state, ConfigRoot config, ICommandBuffer buffer)
        {
            var info = config.Events[EventName];

            state.Events[EventName] = true;
            state.Progress.Remove(info.Scope);
            var rewardLevel = info.RewardLevel;

            RewardLogic.AppendReward(rewardLevel, state, config, buffer);
        }
Example #2
0
        public void Execute(GameState state, ConfigRoot config, ICommandBuffer buffer)
        {
            foreach (var unit in state.Level.PlayerUnits)
            {
                state.AddUnit(unit);
                if (!config.IsFeatureEnabled(Features.AutoHeal))
                {
                    continue;
                }
                var unitConfig = config.Units[unit.Descriptor];
                if (unit.Health < unitConfig.MaxHealth[unit.Level])
                {
                    buffer.Add(new HealUnitCommand(unit.Id));
                }
            }

            var levelDesc   = state.Level.Descriptor;
            var playerUnits = state.Level.PlayerUnits;

            state.Level = null;

            if (!Win)
            {
                return;
            }

            foreach (var unit in playerUnits)
            {
                if (unit.Level >= config.UnitLevels.Length)
                {
                    continue;
                }
                var expAccum = 0;
                foreach (var enemyDesc in config.Levels[levelDesc].EnemyDescriptors)
                {
                    var enemyConfig = config.Units[enemyDesc];
                    expAccum += enemyConfig.Experience;
                }
                if (expAccum > 0)
                {
                    buffer.Add(new AddExperienceCommand(unit.Id, expAccum));
                }
            }

            var scope = LevelUtils.GetScope(levelDesc);

            state.Progress[scope] = Math.Min(state.Progress.GetOrDefault(scope) + 1, LevelUtils.GetIndex(levelDesc) + 1);

            var rewardLevel = config.Levels[levelDesc].RewardLevel;

            RewardLogic.AppendReward(rewardLevel, state, config, buffer);
        }
Example #3
0
        public void Execute(GameState state, ConfigRoot config, ICommandBuffer buffer)
        {
            var days            = GetDaysBetween(state);
            var maxStreaks      = config.DailyRewards.Length;
            var isNeedToDiscard = (days >= 2) || (state.DailyReward.Streak == (maxStreaks - 1));
            var newStreak       = isNeedToDiscard ? 0 : (state.DailyReward.Streak + 1);

            state.DailyReward.LastClaimDate = state.Time.GetRealTime();
            state.DailyReward.Streak        = newStreak;
            var rewardLevel = config.DailyRewards[newStreak];

            RewardLogic.AppendReward(rewardLevel, state, config, buffer);
        }