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