Hey there, what you want to accomplish is pretty simple, I'll seperate the different pieces of code so it's more clear but understand that everything but the timer and actual weather descriptions could go in one procedure. IF we really wanted the weather descriptions in the same procedure we could easily do so, but that seems messy.
Okay Step one the timer, this will go towards the bottom of your script outside of the game definition block. Quest uses seconds so let's see 60seconds * 60minutes * 4hours equals.... 14400 seconds. So we set our interval to 14400, we tell the timer to execute the procedure "forecast" when the timer hits zero, and we start the game with the timer enabled.
define timer <weather>
interval <14400>
action do <forecast>
enabled
end define
Next we have our "forecast" procedure which goes outside the game definition block and is going to pick a weather description at random, display the description, then turn our weather timer back on so the cycle can repeat.
define procedure <forecast>
set numeric <n; $rand(1;6)$>
displaytext <weather%n%>
timeron <weather>
end define
Now we just have to define our text blocks, also outside the game definition block, for each weather description with names such as weather1, weather2, etc.
define text <weather1>
It's lightly drizzling.|n
end define
define text <weather2>
It's pouring heavy rain.|n
end define
define text <weather3>
It's a very blustery day.|n
end define
define text <weather4>
It's very overcast.|n
end define
define text <weather5>
The skies are clear.|n
end define
define text <weather6>
It's terribly stormy.|n
end define
That should be pretty much it. The timer points to the procedure, the procedure runs when the timer hits zero, the procedure shows the weather and resets the timer. Pretty simple huh?