Example #1
0
        private async Task DealDamageToMonster(User user, Attack attack, SpawnedMonster spawnedMonster, string channel)
        {
            var monster = spawnedMonster.Monster;
            var message = attack.Status.ToMessage(_userService.Mention(user), $"*{monster.Name}*", attack.Damage);
            await _slack.BroadcastMessage(message, channel);

            _spawnedMonsterRepository.RegisterUserDamage(spawnedMonster.Id, user.Id, attack.Damage, spawnedMonster.Health);

            if (spawnedMonster.IsDead())
            {
                await _monsterService.HandleMonsterDeathByUser(user, spawnedMonster, channel);
            }
            else if (!spawnedMonster.IsAttackOnCooldown())
            {
                await MonsterAttackUser(spawnedMonster, user, channel);
            }
        }
Example #2
0
        public async Task <DougResponse> AttackMonster(User user, SpawnedMonster spawnedMonster, string channel)
        {
            var energy  = user.Energy - AttackEnergyCost;
            var monster = spawnedMonster.Monster;

            if (user.IsAttackOnCooldown())
            {
                return(new DougResponse(string.Format(DougMessages.CommandOnCooldown, user.CalculateAttackCooldownRemaining())));
            }

            if (energy < 0)
            {
                return(new DougResponse(DougMessages.NotEnoughEnergy));
            }

            _statsRepository.UpdateEnergy(user.Id, energy);
            _userRepository.SetAttackCooldown(user.Id, user.GetAttackCooldown());

            var attack = user.AttackTarget(monster, _eventDispatcher);

            var message = attack.Status.ToMessage(_userService.Mention(user), $"*{monster.Name}*", attack.Damage);
            await _slack.BroadcastMessage(message, channel);

            _monsterRepository.RegisterUserDamage(spawnedMonster.Id, user.Id, attack.Damage);

            if (monster.IsDead())
            {
                await _monsterService.HandleMonsterDeathByUser(user, spawnedMonster, channel);
            }
            else if (!spawnedMonster.IsAttackOnCooldown())
            {
                await MonsterAttackUser(monster, user, spawnedMonster.Id, channel);
            }

            return(new DougResponse());
        }