Example #1
0
        public async Task <GameData> AttackMonster(string userId)
        {
            Player player = await GetPlayer(userId);

            if (player.CurrentRoomId != null)
            {
                Room room = await _roomsClient.GetRoomById((int)player.CurrentRoomId);

                if (room.MonsterId != null)
                {
                    // Attack monster by player
                    bool isDead = await _monstersClient.PatchAttackMonster((int)room.MonsterId);

                    Monster monster = null;
                    if (!isDead)
                    {
                        // If it didn't died it attack player too
                        player = await _usersClient.PatchHpLoss(userId);

                        monster = await _monstersClient.GetMonsterById((int)room.MonsterId);

                        // If player died
                        if (player.CurrentHP <= 0)
                        {
                            // ?
                        }
                    }
                    else
                    {
                        // If monster died clear it from everywhere
                        await _monstersClient.DeleteMonster((int)room.MonsterId);

                        room = await _roomsClient.DeleteMonster(room.RoomId);
                    }

                    return(new GameData()
                    {
                        Player = player, Room = room, Monster = monster
                    });
                }
                else
                {
                    throw new NullReferenceException("No alive monsters in the room!");
                }
            }
            else
            {
                throw new NullReferenceException("Player has no room!");
            }
        }