Keep score after restart & limit ads/hour

Hi guys! I`ve just integrated Unity Ads in my first game and currently I am facing two problems: limiting the no. of ads per hour(1) and keeping the score after the user watched the ad(2).

 void ShowRewardedVideo()
    {
        DateTime currentTime = DateTime.Now;
        DateTime resetTime = DateTime.Parse(PlayerPrefs.GetString("ADResetTime", currentTime.ToString()));
        TimeSpan travelTime = currentTime - resetTime;
        if (travelTime.TotalMinutes > 60f)
        {
            adCounter = 0;
            PlayerPrefs.SetString("ADResetTime", currentTime.ToString());
        }

        if (Advertisement.IsReady() && travelTime.TotalMinutes<2f)
        {
            Advertisement.Show(myPlacementId);
            if (adCounter <= 2)
            {
                adCounter++;
            }
           
        }
       
    }

public class LengthScore : MonoBehaviour
{
    public Transform playerTransform;
    public Text LengthText;
    public Text HighScoreDistance;
    public float distance;
    public float lastdistance;

    private void Start()
    {
        HighScoreDistance.text = PlayerPrefs.GetFloat("HighScoreDistance", 0).ToString("F0");
    }
       
    void Update()
    {

            if (RewardedAdsButton.adCounter > 1)
            {
                distance = playerTransform.position.z + lastdistance;
                lastdistance = 0;
            }
            else { distance = playerTransform.position.z; }
        

        LengthText.text = distance.ToString("0");

        if (distance > PlayerPrefs.GetFloat("HighScoreDistance", 0))
            {
            PlayerPrefs.SetFloat("HighScoreDistance", distance);
            HighScoreDistance.text = distance.ToString("F0");
        }

        lastdistance = distance;
        
    }

    
}

I have searched multiple solutions, but nothing worked so far. Please let me know where should I change the script. Thanks!

Managed to fix problem no.2

public class LengthScore : MonoBehaviour
{
    public Transform playerTransform;
    public Text LengthText;
    public Text HighScoreDistance;
    public float distance;
    public static float lastdistance;



 

    void Start()
    {

      if (gameManager.didWatchAd)
        {
            lastdistance = PlayerPrefs.GetFloat("Score", distance);

        }

        else
        {
            lastdistance = 0;
        }
        
        HighScoreDistance.text = PlayerPrefs.GetFloat("HighScoreDistance", 0).ToString("F0");
    }

    private void Update()
    {
        distance = lastdistance + playerTransform.position.z;

        LengthText.text = distance.ToString("0");



        if (distance > PlayerPrefs.GetFloat("HighScoreDistance", 0))
        {
            PlayerPrefs.SetFloat("HighScoreDistance", distance);
            HighScoreDistance.text = distance.ToString("F0");
        }
        PlayerPrefs.SetFloat("Score", distance);
    }

    
}

For those who will use this script, make sure to set didWatchAd to true in the method that restart the scene if the user saw the ad and to false in the other method.