This is a daily reward script with a timer. Every time the player leaves and rejoins the script resets. I tried implementing the on.time function myself but it didn't work. Can you help me?

local hr = 0
local min = 0
local sec = 0
local mic = 0

script.Parent.Parent.Claim.MouseButton1Click:connect(function()
    game.Workspace.ClickEvent:FireServer()
    game.ReplicatedStorage.button_click:Play()
    game.ReplicatedStorage.ding:Play()
    debounce = false
    if hr == 0 then
        hr = 24
    script.Parent.Parent.Parent.Parent.Rain.Enabled = true
    wait(2)
    script.Parent.Parent.Parent.Parent.Rain.Enabled = false
    end
    wait(0.1)
    script.Parent.Parent.NotYet.Visible = true
end)

while wait() do

    mic = mic - 2
    if mic <= -1 then
        sec = sec - 1
        mic = 59
        if sec == -1 then
            min = min - 1
            sec = 59
            if min == -1 then
                hr = hr - 1
                min = 59
                if hr == -1 then
                    hr = 0
                    min = 0
                    sec = 0
                    mic = 0
                end
            end
        end
    end 

    if hr <= 9 and min <= 9 and sec <= 9 and mic <= 9 then
        script.Parent.Text = "0" ..hr.. ":0" ..min.. ":0" ..sec..":0" ..mic
    elseif hr <= 9 and min <= 9 and sec <= 9 and mic >= 10 then
        script.Parent.Text = "0" ..hr.. ":0" ..min.. ":0" ..sec..":" ..mic
    elseif hr <= 9 and min <= 9 and sec >= 10 and mic <= 9 then
        script.Parent.Text = "0" ..hr.. ":" ..min.. ":" ..sec..":0" ..mic
    elseif hr <= 10 and min >= 10 and sec >= 10 and mic >= 10 then
        script.Parent.Text = "0" ..hr.. ":" ..min.. ":" ..sec..":" ..mic
    elseif hr >= 10 and min <= 9 and sec <= 9 and mic <= 9 then
        script.Parent.Text = hr.. ":" ..min.. ":0" ..sec..":0" ..mic
    elseif hr >= 10 and min >= 10 and sec <= 9 and mic >= 10 then
        script.Parent.Text = hr.. ":" ..min.. ":0" ..sec..":" ..mic
    elseif hr >= 10 and min >= 10 and sec >= 10 and mic <= 9 then
        script.Parent.Text = hr.. ":" ..min.. ":" ..sec..":0" ..mic
    elseif hr >= 10 and min >= 10 and sec >= 10 and mic >= 10 then
        script.Parent.Text = hr.. ":" ..min.. ":" ..sec..":" ..mic
    end

    if hr == 0 and min == 0 and sec == 0 and mic == 0 then
        script.Parent.Parent.NotYet.Visible = false
        debounce = true
    end
end